Condividi tramite


Assembly.CreateInstance Metodo

Definizione

Individua un tipo da questo assembly e ne crea un'istanza usando l'attivatore di sistema.

Overload

Nome Descrizione
CreateInstance(String)

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, usando la ricerca con distinzione tra maiuscole e minuscole.

CreateInstance(String, Boolean)

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, con la ricerca facoltativa con distinzione tra maiuscole e minuscole.

CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, con la ricerca facoltativa con distinzione tra maiuscole e minuscole e con le impostazioni cultura, gli argomenti e gli attributi di associazione e attivazione specificati.

CreateInstance(String)

Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, usando la ricerca con distinzione tra maiuscole e minuscole.

public:
 System::Object ^ CreateInstance(System::String ^ typeName);
public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead.")]
public object? CreateInstance(string typeName);
public object CreateInstance(string typeName);
public object? CreateInstance(string typeName);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead.")>]
member this.CreateInstance : string -> obj
member this.CreateInstance : string -> obj
abstract member CreateInstance : string -> obj
override this.CreateInstance : string -> obj
Public Function CreateInstance (typeName As String) As Object

Parametri

typeName
String

Oggetto FullName del tipo da individuare.

Restituisce

Istanza del tipo specificato creato con il costruttore senza parametri; o null se typeName non viene trovato. Il tipo viene risolto usando il gestore di associazione predefinito, senza specificare le impostazioni cultura o gli attributi di attivazione e con BindingFlags impostato su Public o Instance.

Implementazioni

Attributi

Eccezioni

typeName è una stringa vuota ("") o una stringa che inizia con un carattere Null.

oppure

L'assembly corrente è stato caricato nel contesto di sola reflection.

typeName è null.

Non è stato trovato alcun costruttore corrispondente.

typeName richiede un assembly dipendente che non è stato trovato.

typeName richiede un assembly dipendente trovato ma che non è stato possibile caricare.

oppure

L'assembly corrente è stato caricato nel contesto di sola reflection e typeName richiede un assembly dipendente che non è stato precaricato.

typeName richiede un assembly dipendente, ma il file non è un assembly valido per il runtime attualmente caricato.

Esempio

Nell'esempio seguente viene definita una Person classe e viene chiamato il metodo per crearne un'istanza CreateInstance(String) .

using System;
using System.Reflection;
using Contoso.Libraries;

namespace Contoso.Libraries
{
   public class Person
   {
      private string _name;

      public Person()
      { }

      public Person(string name)
      {
         this._name = name;
      }

      public string Name
      { get { return this._name; }
        set { this._name = value; } }

      public override string ToString()
      {
         return this._name;
      }
   }
}

public class Example
{
   public static void Main()
   {
      Assembly assem = typeof(Person).Assembly;
      Person p = (Person) assem.CreateInstance("Contoso.Libraries.Person");
      if (!(p == null)) {
         p.Name = "John";
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p);
      }
      else {
         Console.WriteLine("Unable to instantiate a Person object.");
      }
   }
}
// The example displays the following output:
//        Instantiated a Person object whose value is 'John'
Imports System.Reflection
Imports Contoso.Libraries

Namespace Contoso.Libraries
   Public Class Person
      Private _name As String 
   
      Public Sub New()
      End Sub 
   
      Public Sub New(name As String)
         Me._name = name
      End Sub 
   
      Public Property Name As String 
         Get 
            Return Me._name
         End Get 
         Set 
            Me._name = value
         End Set 
      End Property 
   
      Public Overrides Function ToString() As String 
         Return Me._name
      End Function 
   End Class
End Namespace 

Module Example
   Public Sub Main()
      Dim assem As Assembly = GetType(Person).Assembly
      Dim p As Person = CType(assem.CreateInstance("Contoso.Libraries.Person"),
                              Person)
      If p IsNot Nothing Then
         p.Name = "John"
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p)
      Else
         Console.WriteLine("Unable to instantiate a Person object.")
      End If   
   End Sub
End Module
' The example displays the following output:
'       Instantiated a Person object whose value is 'John'

Commenti

Se il runtime non riesce a trovare typeName nell'istanza Assembly di , restituisce null anziché generare un'eccezione. Questo problema può verificarsi perché:

  • Non è stato specificato il nome completo del tipo.

  • È stato specificato il nome completo del tipo, ma il relativo caso non corrisponde al caso della proprietà del Type.FullName tipo. Per un confronto senza distinzione tra maiuscole e minuscole con typeName il nome completo del tipo, chiamare l'overload CreateInstance(String, Boolean) e specificare true per l'argomento ignoreCase .

  • Il tipo non esiste nell'istanza corrente Assembly .

Si applica a

CreateInstance(String, Boolean)

Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, con la ricerca facoltativa con distinzione tra maiuscole e minuscole.

public:
 System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase);
public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead.")]
public object? CreateInstance(string typeName, bool ignoreCase);
public object CreateInstance(string typeName, bool ignoreCase);
public object? CreateInstance(string typeName, bool ignoreCase);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead.")>]
member this.CreateInstance : string * bool -> obj
member this.CreateInstance : string * bool -> obj
abstract member CreateInstance : string * bool -> obj
override this.CreateInstance : string * bool -> obj
Public Function CreateInstance (typeName As String, ignoreCase As Boolean) As Object

Parametri

typeName
String

Oggetto FullName del tipo da individuare.

ignoreCase
Boolean

true per ignorare la distinzione tra maiuscole e minuscole del nome del tipo; in caso contrario, false.

Restituisce

Istanza del tipo specificato creato con il costruttore senza parametri; o null se typeName non viene trovato. Il tipo viene risolto usando il gestore di associazione predefinito, senza specificare le impostazioni cultura o gli attributi di attivazione e con BindingFlags impostato su Public o Instance.

Implementazioni

Attributi

Eccezioni

typeName è una stringa vuota ("") o una stringa che inizia con un carattere Null.

oppure

L'assembly corrente è stato caricato nel contesto di sola reflection.

Non è stato trovato alcun costruttore corrispondente.

typeName è null.

typeName richiede un assembly dipendente che non è stato trovato.

typeName richiede un assembly dipendente trovato ma che non è stato possibile caricare.

oppure

L'assembly corrente è stato caricato nel contesto di sola reflection e typeName richiede un assembly dipendente che non è stato precaricato.

typeName richiede un assembly dipendente, ma il file non è un assembly valido per il runtime attualmente caricato.

Esempio

Nell'esempio seguente viene definita una Person classe . Chiama quindi il CreateInstance(String) metodo per crearne un'istanza, ma poiché la combinazione di maiuscole e minuscole dell'argomento typeName non corrisponde a quella della proprietà del FullName tipo, il metodo restituisce null. Quando l'esempio passa la stessa stringa all'overload CreateInstance(String, Boolean) e specifica che il confronto deve essere senza distinzione tra maiuscole e minuscole, viene trovata la Person classe e viene creata un'istanza di un Person oggetto.

using System;
using System.Reflection;
using Contoso.Libraries;

namespace Contoso.Libraries
{
   public class Person
   {
      private string _name;

      public Person()
      { }

      public Person(string name)
      {
         this._name = name;
      }

      public string Name
      { get { return this._name; }
        set { this._name = value; } }

      public override string ToString()
      {
         return this._name;
      }
   }
}

public class Example
{
   public static void Main()
   {
      String fullName = "contoso.libraries.person";
      Assembly assem = typeof(Person).Assembly;
      Person p = (Person) assem.CreateInstance(fullName);
      if (!(p == null)) {
         p.Name = "John";
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p);
      }
      else {
         Console.WriteLine("Unable to instantiate a Person object " +
                           "with Assembly.CreateInstance(String)");
         // Try case-insensitive type name comparison.
         p = (Person) assem.CreateInstance(fullName, true);
         if (!(p == null)) {
            p.Name = "John";
            Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                              p.GetType().Name, p);
         }
         else {
            Console.WriteLine("Unable to instantiate a {0} object.",
                              fullName);
         }
      }
   }
}
// The example displays the following output:
//    Unable to instantiate a Person object with Assembly.CreateInstance(String)
//    Instantiated a Person object whose value is 'John'
Imports System.Reflection
Imports Contoso.Libraries

Namespace Contoso.Libraries
   Public Class Person
      Private _name As String 
   
      Public Sub New()
      End Sub 
   
      Public Sub New(name As String)
         Me._name = name
      End Sub 
   
      Public Property Name As String 
         Get 
            Return Me._name
         End Get 
         Set 
            Me._name = value
         End Set 
      End Property 
   
      Public Overrides Function ToString() As String 
         Return Me._name
      End Function 
   End Class
End Namespace 

Module Example
   Public Sub Main()
      Dim fullName As String = "contoso.libraries.person"
      Dim assem As Assembly = GetType(Person).Assembly
      Dim p As Person = CType(assem.CreateInstance(fullName),
                              Person)
      If p IsNot Nothing Then
         p.Name = "John"
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p)
      Else
         Console.WriteLine("Unable to instantiate a Person object" +
                           "with Assembly.CreateInstance(String)")
         ' Try case-insensitive type name comparison.
         p = CType(assem.CreateInstance(fullName, true), Person)
         If p IsNot Nothing Then 
            p.Name = "John"
            Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                              p.GetType().Name, p)
         Else 
            Console.WriteLine("Unable to instantiate a {0} object.", 
                              fullName)
         End If   
      End If   
   End Sub
End Module
' The example displays the following output:
'    Unable to instantiate a Person object with Assembly.CreateInstance(String)
'    Instantiated a Person object whose value is 'John'

Commenti

Se il runtime non riesce a trovare typeName nell'istanza Assembly di , restituisce null anziché generare un'eccezione. Questo problema può verificarsi perché:

  • Non è stato specificato il nome completo del tipo.

  • Il tipo non esiste nell'istanza corrente Assembly .

Si applica a

CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs
Origine:
Assembly.cs

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, con la ricerca facoltativa con distinzione tra maiuscole e minuscole e con le impostazioni cultura, gli argomenti e gli attributi di associazione e attivazione specificati.

public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead.")]
public virtual object? CreateInstance(string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object[]? args, System.Globalization.CultureInfo? culture, object[]? activationAttributes);
public virtual object CreateInstance(string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
public virtual object? CreateInstance(string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object[]? args, System.Globalization.CultureInfo? culture, object[]? activationAttributes);
public object CreateInstance(string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead.")>]
abstract member CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
override this.CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
abstract member CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
override this.CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
Public Overridable Function CreateInstance (typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As Object
Public Function CreateInstance (typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As Object

Parametri

typeName
String

Oggetto FullName del tipo da individuare.

ignoreCase
Boolean

true per ignorare la distinzione tra maiuscole e minuscole del nome del tipo; in caso contrario, false.

bindingAttr
BindingFlags

Maschera di bit che influisce sul modo in cui viene eseguita la ricerca. Il valore è una combinazione di flag di bit da BindingFlags.

binder
Binder

Oggetto che consente l'associazione, la coercizione dei tipi di argomento, la chiamata di membri e il recupero di MemberInfo oggetti tramite reflection. Se binder è null, viene usato il gestore di associazione predefinito.

args
Object[]

Matrice che contiene gli argomenti da passare al costruttore. Questa matrice di argomenti deve corrispondere in numero, ordine e digitare i parametri del costruttore da richiamare. Se il costruttore senza parametri è desiderato, args deve essere una matrice vuota o null.

culture
CultureInfo

Istanza di CultureInfo utilizzata per gestire la coercizione dei tipi. Se è null, viene usato per CultureInfo il thread corrente. È necessario convertire una stringa che rappresenta 1000 in un Double valore, ad esempio perché 1000 è rappresentato in modo diverso da impostazioni cultura diverse.

activationAttributes
Object[]

Matrice di uno o più attributi che possono partecipare all'attivazione. In genere, una matrice che contiene un singolo UrlAttribute oggetto che specifica l'URL necessario per attivare un oggetto remoto. Questo parametro è correlato agli oggetti attivati dal client. L'attivazione client è una tecnologia legacy che viene mantenuta per la compatibilità con le versioni precedenti, ma non è consigliata per il nuovo sviluppo. Le applicazioni distribuite devono invece usare Windows Communication Foundation.

Restituisce

Istanza del tipo specificato o null se typeName non viene trovata. Gli argomenti forniti vengono usati per risolvere il tipo e per associare il costruttore utilizzato per creare l'istanza.

Implementazioni

Attributi

Eccezioni

typeName è una stringa vuota ("") o una stringa che inizia con un carattere Null.

oppure

L'assembly corrente è stato caricato nel contesto di sola reflection.

typeName è null.

Non è stato trovato alcun costruttore corrispondente.

Una matrice di attributi di attivazione non vuota viene passata a un tipo che non eredita da MarshalByRefObject.

typeName richiede un assembly dipendente che non è stato trovato.

typeName richiede un assembly dipendente trovato ma che non è stato possibile caricare.

oppure

L'assembly corrente è stato caricato nel contesto di sola reflection e typeName richiede un assembly dipendente che non è stato precaricato.

typeName richiede un assembly dipendente, ma il file non è un assembly valido per il runtime attualmente caricato.

Si applica a