Assembly.CreateInstance Metodo

Definizione

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

Overload

CreateInstance(String)

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

CreateInstance(String, Boolean)

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

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

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

CreateInstance(String)

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

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

public:
 System::Object ^ CreateInstance(System::String ^ typeName);
public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName);
public object? CreateInstance (string typeName);
public object CreateInstance (string typeName);
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

FullName del tipo da individuare.

Restituisce

Istanza del tipo specificato creata con il costruttore senza parametri oppure null se typeName non viene trovato. Il tipo viene risolto usando il binder predefinito, senza specificare attributi delle impostazioni cultura o dell'attivazione e con BindingFlags impostato su Public o Instance.

Implementazioni

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 che è stato 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 , restituisce null anziché generare un'eccezione. Ciò può verificarsi perché:

  • Non è stato specificato il nome completo del tipo.

  • È stato specificato il nome completo del tipo, ma il case non corrisponde alla distinzione tra maiuscole e minuscole 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)

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

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

public:
 System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase);
public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase);
public object? CreateInstance (string typeName, bool ignoreCase);
public object CreateInstance (string typeName, bool ignoreCase);
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

FullName del tipo da individuare.

ignoreCase
Boolean

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

Restituisce

Istanza del tipo specificato creata con il costruttore senza parametri oppure null se typeName non viene trovato. Il tipo viene risolto usando il binder predefinito, senza specificare attributi delle impostazioni cultura o dell'attivazione e con BindingFlags impostato su Public o Instance.

Implementazioni

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 che è stato 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 , restituisce null anziché generare un'eccezione. Ciò 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[])

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

Individua il tipo specificato in questo assembly e ne crea un'istanza usando l'attivatore di sistema, consentendo la ricerca con distinzione facoltativa tra maiuscole e minuscole e usando le impostazioni cultura, gli argomenti e gli attributi di attivazione e di binding 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);
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);
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

FullName del tipo da individuare.

ignoreCase
Boolean

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

bindingAttr
BindingFlags

Maschera di bit che influenza le modalità di esecuzione della ricerca. Il valore è una combinazione di flag di bit dell'oggetto BindingFlags.

binder
Binder

Oggetto che consente il binding, la coercizione dei tipi di argomento, la chiamata dei membri e il recupero di oggetti MemberInfo tramite reflection. Se binder è null, verrà usato il binder predefinito.

args
Object[]

Matrice contenente gli argomenti da passare al costruttore. La matrice di argomenti deve corrispondere ai parametri del costruttore da richiamare in quanto a numero, ordine e tipo. Per usare il costruttore senza parametri, args deve essere una matrice vuota o null.

culture
CultureInfo

Istanza di CultureInfo usata per regolare la coercizione dei tipi. Se è null, per il thread corrente verrà usato l'oggetto CultureInfo. Si tratta di un parametro necessario per convertire una stringa che rappresenta, ad esempio, il numero 1000 in un valore Double, dal momento che questo numero è rappresentato in modo diverso nelle varie impostazioni cultura.

activationAttributes
Object[]

Matrice di uno o più attributi che possono prendere parte all'attivazione. In genere, matrice che contiene un singolo oggetto UrlAttribute che specifica l'URL necessario per attivare un oggetto remoto. Il parametro è correlato agli oggetti attivati dal client. L'attivazione del client è una tecnologia legacy mantenuta per garantire la compatibilità con le versioni precedenti, ma non è consigliata per nuove attività di sviluppo. Per le applicazioni distribuite si dovrebbe usare invece Windows Communication Foundation.

Restituisce

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

Implementazioni

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 che è stato 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