Assembly.CreateInstance Methode

Definition

Sucht einen Typ aus dieser Assembly und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs.

Überlädt

CreateInstance(String)

Sucht den angegebenen Typ aus dieser Assembly unter Berücksichtigung der Groß- und Kleinschreibung und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs.

CreateInstance(String, Boolean)

Sucht den angegebenen Typ aus dieser Assembly, unter wahlweiser Berücksichtigung der Groß- und Kleinschreibung, und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs.

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

Sucht den angegebenen Typ aus dieser Assembly und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs. Hierbei ist die Berücksichtigung der Groß- und Kleinschreibung optional und Kultur, Argumente, Bindungs- und Aktivierungsattribute sind angegeben.

CreateInstance(String)

Sucht den angegebenen Typ aus dieser Assembly unter Berücksichtigung der Groß- und Kleinschreibung und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs.

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

Parameter

typeName
String

Der FullName des zu suchenden Typs.

Gibt zurück

Object

Eine Instanz des angegebenen Typs, der mit dem parameterlosen Konstruktor erstellt wurde; oder null, wenn typeName nicht gefunden wird. Der Typ wird mit dem Standardbinder aufgelöst, ohne Kultur- oder Aktivierungsattribute anzugeben, und mit BindingFlags auf Public oder Instance festgelegt.

Implementiert

Ausnahmen

typeName ist eine leere Zeichenfolge ("") oder eine Zeichenfolge, die mit einem NULL-Zeichen anfängt.

- oder -

Die aktuelle Assembly wurde in den ReflectionOnly-Kontext geladen.

typeName ist null.

Es wurde kein übereinstimmender Konstruktor gefunden.

typeName erfordert eine abhängige Assembly, die nicht gefunden werden konnte.

typeName erfordert eine abhängige Assembly, die gefunden wurde, aber nicht geladen werden konnte.

- oder -

Die aktuelle Assembly wurde in den reflektionsbezogenen Kontext geladen, und typeName erfordert eine abhängige Assembly, die nicht vorab geladen wurde.

typeName erfordert eine abhängige Assembly, die Datei ist jedoch keine gültige Assembly.

  • oder -

typeName erfordert eine abhängige Assembly, die für eine Version der Laufzeit kompiliert wurde, die höher als die derzeit geladene Version ist.

Beispiele

Das folgende Beispiel definiert eine Person -Klasse und ruft die CreateInstance(String) -Methode auf, um sie zu instanziieren.

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'

Hinweise

Wenn die Runtime in der -Instanz nicht typeName finden Assembly kann, wird null zurückgegeben, anstatt eine Ausnahme zu auslösen. Dies kann folgende Ursache haben:

  • Sie haben den vollqualifizierten Namen des Typs nicht angegeben.

  • Sie haben den vollqualifizierten Typnamen angegeben, aber seine Schreibart ist nicht mit der -Eigenschaft des Typs Type.FullName übereinstimmend. Um die Groß-/Kleinschreibung nicht mit dem vollständigen Namen des Typs zu vergleichen, rufen Sie die Überladung typeName auf, CreateInstance(String, Boolean) und geben Sie für das Argument true ignoreCase an.

  • Der Typ ist in der aktuellen Instanz nicht Assembly vorhanden.

Gilt für:

CreateInstance(String, Boolean)

Sucht den angegebenen Typ aus dieser Assembly, unter wahlweiser Berücksichtigung der Groß- und Kleinschreibung, und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs.

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

Parameter

typeName
String

Der FullName des zu suchenden Typs.

ignoreCase
Boolean

true, um die Groß- und Kleinschreibung des Typnamens zu ignorieren, andernfalls false.

Gibt zurück

Object

Eine Instanz des angegebenen Typs, der mit dem parameterlosen Konstruktor erstellt wurde; oder null, wenn typeName nicht gefunden wird. Der Typ wird mit dem Standardbinder aufgelöst, ohne Kultur- oder Aktivierungsattribute anzugeben, und mit BindingFlags auf Public oder Instance festgelegt.

Implementiert

Ausnahmen

typeName ist eine leere Zeichenfolge ("") oder eine Zeichenfolge, die mit einem NULL-Zeichen anfängt.

- oder -

Die aktuelle Assembly wurde in den ReflectionOnly-Kontext geladen.

Es wurde kein übereinstimmender Konstruktor gefunden.

typeName ist null.

typeName erfordert eine abhängige Assembly, die nicht gefunden werden konnte.

typeName erfordert eine abhängige Assembly, die gefunden wurde, aber nicht geladen werden konnte.

- oder -

Die aktuelle Assembly wurde in den reflektionsbezogenen Kontext geladen, und typeName erfordert eine abhängige Assembly, die nicht vorab geladen wurde.

typeName erfordert eine abhängige Assembly, die Datei ist jedoch keine gültige Assembly.

  • oder -

typeName erfordert eine abhängige Assembly, die für eine Version der Laufzeit kompiliert wurde, die höher als die derzeit geladene Version ist.

Beispiele

Im folgenden Beispiel wird eine Person -Klasse definiert. Anschließend ruft sie die -Methode auf, um sie zu instanziieren, aber da die Schreibweise des Arguments nicht mit der der -Eigenschaft des Typs übereinstimmend ist, gibt die Methode CreateInstance(String) typeName FullName null zurück. Wenn das Beispiel dieselbe Zeichenfolge an die Überladung übergibt und angibt, dass beim Vergleich die Groß-/Kleinschreibung nicht beachtet werden soll, wird die -Klasse gefunden, und ein -Objekt wird CreateInstance(String, Boolean) Person erfolgreich Person instanziiert.

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'

Hinweise

Wenn die Runtime in der -Instanz nicht typeName finden Assembly kann, wird null zurückgegeben, anstatt eine Ausnahme zu auslösen. Dies kann folgende Ursache haben:

  • Sie haben den vollqualifizierten Namen des Typs nicht angegeben.

  • Der Typ ist in der aktuellen Instanz nicht Assembly vorhanden.

Gilt für:

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

Sucht den angegebenen Typ aus dieser Assembly und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs. Hierbei ist die Berücksichtigung der Groß- und Kleinschreibung optional und Kultur, Argumente, Bindungs- und Aktivierungsattribute sind angegeben.

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

Parameter

typeName
String

Der FullName des zu suchenden Typs.

ignoreCase
Boolean

true, um die Groß- und Kleinschreibung des Typnamens zu ignorieren, andernfalls false.

bindingAttr
BindingFlags

Eine Bitmaske, die sich auf die Ausführung der Suche auswirkt. Der Wert ist eine Kombination von Bitflags aus BindingFlags.

binder
Binder

Ein Objekt, das die Bindung, die Umwandlung von Argumenttypen, das Aufrufen von Membern und das Abrufen von MemberInfo-Objekten über Reflektion ermöglicht. Wenn binder den Wert null aufweist, wird der Standardbinder verwendet.

args
Object[]

Ein Array, das die an den Konstruktor zu übergebenden Argumente enthält. Dieses Array von Argumenten muss bezüglich Anzahl, Reihenfolge und Typ mit den Parametern des aufzurufenden Konstruktors übereinstimmen. Wenn der parameterlose Konstruktor gewünscht ist, muss args ein leeres Array oder null sein.

culture
CultureInfo

Eine Instanz von CultureInfo für die Steuerung der Umwandlung von Typen. Wenn dies null ist, wird die CultureInfo des aktuellen Threads verwendet. (Dies ist z. B. erforderlich, um eine Zeichenfolge, die 1000 darstellt, in einen Double-Wert zu konvertieren, da 1000 in verschiedenen Kulturen unterschiedlich dargestellt wird.)

activationAttributes
Object[]

Ein Array mit einem oder mehreren Attributen, die an der Aktivierung beteiligt sein können. Üblicherweise ein Array, das ein einzelnes UrlAttribute-Objekt enthält, das die zum Aktivieren eines Remoteobjekts erforderliche URL angibt. Der Parameter ist vom Client aktivierten Objekten zugeordnet. Die Clientaktivierung ist eine veraltete Technologie, die zum Zweck der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten, jedoch nicht für die Neuentwicklung empfohlen wird. Für verteilte Anwendungen sollte stattdessen Windows Communication Foundation verwendet werden.

Gibt zurück

Object

Eine Instanz des angegebenen Typs oder null, wenn typeName nicht gefunden wird. Die angegebenen Argumente werden verwendet, um den Typ aufzulösen und den Konstruktor zu binden, der verwendet wird, um die Instanz zu erstellen.

Implementiert

Ausnahmen

typeName ist eine leere Zeichenfolge ("") oder eine Zeichenfolge, die mit einem NULL-Zeichen anfängt.

- oder -

Die aktuelle Assembly wurde in den ReflectionOnly-Kontext geladen.

typeName ist null.

Es wurde kein übereinstimmender Konstruktor gefunden.

Ein nicht leeres Array von Aktivierungsattributen wird an einen Typ übergeben, der nicht von MarshalByRefObject erbt.

typeName erfordert eine abhängige Assembly, die nicht gefunden werden konnte.

typeName erfordert eine abhängige Assembly, die gefunden wurde, aber nicht geladen werden konnte.

- oder -

Die aktuelle Assembly wurde in den reflektionsbezogenen Kontext geladen, und typeName erfordert eine abhängige Assembly, die nicht vorab geladen wurde.

typeName erfordert eine abhängige Assembly, die Datei ist jedoch keine gültige Assembly.

- oder -

typeName erfordert eine abhängige Assembly, die für eine Version der Laufzeit kompiliert wurde, die höher als die derzeit geladene Version ist.

Gilt für: