Sdílet prostřednictvím


Assembly.CreateInstance Metoda

Definice

Vyhledá typ z tohoto sestavení a vytvoří jeho instanci pomocí aktivátoru systému.

Přetížení

CreateInstance(String)

Vyhledá zadaný typ z tohoto sestavení a vytvoří jeho instanci pomocí aktivátoru systému pomocí vyhledávání s rozlišováním velkých a malých písmen.

CreateInstance(String, Boolean)

Vyhledá zadaný typ z tohoto sestavení a vytvoří jeho instanci pomocí aktivátoru systému s volitelným vyhledáváním rozlišující malá a velká písmena.

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

Vyhledá zadaný typ z tohoto sestavení a vytvoří jeho instanci pomocí aktivátoru systému s volitelným vyhledáváním s rozlišováním velkých a malých písmen a má zadanou jazykovou verzi, argumenty a vazby a aktivační atributy.

CreateInstance(String)

Zdroj:
Assembly.cs
Zdroj:
Assembly.cs
Zdroj:
Assembly.cs

Vyhledá zadaný typ z tohoto sestavení a vytvoří jeho instanci pomocí aktivátoru systému pomocí vyhledávání s rozlišováním velkých a malých písmen.

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

Parametry

typeName
String

Typ FullName , který chcete najít.

Návraty

Instance zadaného typu vytvořené pomocí konstruktoru bez parametrů; nebo null pokud typeName nebyl nalezen. Typ se vyřeší pomocí výchozího pořadače, bez zadání atributů jazykové verze nebo aktivace a s nastaveným BindingFlags na Public nebo Instance.

Implementuje

Výjimky

typeName je prázdný řetězec ("") nebo řetězec začínající znakem null.

-nebo-

Aktuální sestavení bylo načteno do kontextu jen pro reflexi.

typeName je null.

Nebyl nalezen žádný odpovídající konstruktor.

typeName vyžaduje závislé sestavení, které nebylo nalezeno.

typeName vyžaduje závislé sestavení, které bylo nalezeno, ale nebylo možné ho načíst.

-nebo-

Aktuální sestavení bylo načteno do kontextu pouze pro reflexi a typeName vyžaduje závislé sestavení, které nebylo předem načteno.

typeName vyžaduje závislé sestavení, ale soubor není platným sestavením pro aktuálně načtený modul runtime.

Příklady

Následující příklad definuje Person třídu a volá metodu CreateInstance(String) k vytvoření instance.

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'

Poznámky

Pokud modul runtime nemůže najít typeName v Assembly instanci, vrátí null místo vyvolání výjimky. K tomu může dojít z následujících důvodů:

  • Nezadali jste plně kvalifikovaný název typu.

  • Zadali jste plně kvalifikovaný název typu, ale velikost písmen se neshoduje s velikostí písmen vlastnosti type Type.FullName . Pro porovnání s úplným typeName názvem typu nerozlišují malá a velká písmena, zavolejte CreateInstance(String, Boolean) přetížení a jako ignoreCase argument zadejte true .

  • Typ v aktuální Assembly instanci neexistuje.

Platí pro

CreateInstance(String, Boolean)

Zdroj:
Assembly.cs
Zdroj:
Assembly.cs
Zdroj:
Assembly.cs

Vyhledá zadaný typ z tohoto sestavení a vytvoří jeho instanci pomocí aktivátoru systému s volitelným vyhledáváním rozlišující malá a velká písmena.

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

Parametry

typeName
String

Typ FullName , který chcete najít.

ignoreCase
Boolean

trueignorovat velikost písmen názvu typu; v opačném případě . false

Návraty

Instance zadaného typu vytvořené pomocí konstruktoru bez parametrů; nebo null pokud typeName nebyl nalezen. Typ se vyřeší pomocí výchozího pořadače, bez zadání atributů jazykové verze nebo aktivace a s nastaveným BindingFlags na Public nebo Instance.

Implementuje

Výjimky

typeName je prázdný řetězec ("") nebo řetězec začínající znakem null.

-nebo-

Aktuální sestavení bylo načteno do kontextu jen pro reflexi.

Nebyl nalezen žádný odpovídající konstruktor.

typeName je null.

typeName vyžaduje závislé sestavení, které nebylo nalezeno.

typeName vyžaduje závislé sestavení, které bylo nalezeno, ale nebylo možné ho načíst.

-nebo-

Aktuální sestavení bylo načteno do kontextu pouze pro reflexi a typeName vyžaduje závislé sestavení, které nebylo předem načteno.

typeName vyžaduje závislé sestavení, ale soubor není platným sestavením pro aktuálně načtený modul runtime.

Příklady

Následující příklad definuje Person třídu . Potom zavolá metodu CreateInstance(String) k vytvoření instance argumentu, ale vzhledem k tomu, že velikostí a malých částí typeName argumentu se neshoduje s vlastností typu FullName , vrátí nullmetoda hodnotu . Když příklad předá stejný řetězec přetížení CreateInstance(String, Boolean) a určuje, že porovnání by nemělo rozlišovat malá a velká písmena, Person třída je nalezena a Person objekt je úspěšně vytvořena instance.

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'

Poznámky

Pokud modul runtime nemůže najít typeName v Assembly instanci, vrátí null místo vyvolání výjimky. K tomu může dojít z následujících důvodů:

  • Nezadali jste plně kvalifikovaný název typu.

  • Typ v aktuální Assembly instanci neexistuje.

Platí pro

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

Zdroj:
Assembly.cs
Zdroj:
Assembly.cs
Zdroj:
Assembly.cs

Vyhledá zadaný typ z tohoto sestavení a vytvoří jeho instanci pomocí aktivátoru systému s volitelným vyhledáváním s rozlišováním velkých a malých písmen a má zadanou jazykovou verzi, argumenty a vazby a aktivační atributy.

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

Parametry

typeName
String

Typ FullName , který chcete najít.

ignoreCase
Boolean

trueignorovat velikost písmen názvu typu; v opačném případě . false

bindingAttr
BindingFlags

Bitová maska, která ovlivňuje způsob, jakým se provádí hledání. Hodnota je kombinace bitových příznaků z BindingFlags.

binder
Binder

Objekt, který umožňuje vazbu, vynucování typů argumentů, vyvolání členů a načtení MemberInfo objektů prostřednictvím reflexe. Pokud binder je null, použije se výchozí pořadač.

args
Object[]

Pole obsahující argumenty, které mají být předány konstruktoru. Toto pole argumentů se musí shodovat s číslem, pořadím a typem parametrů konstruktoru, který má být vyvolán. Pokud je konstruktor bez parametrů požadovaný, args musí být prázdné pole nebo null.

culture
CultureInfo

Instance CultureInfo slouží k řízení převodu typů. Pokud je nullto , použije se CultureInfo pro aktuální vlákno . (To je nezbytné k převodu řetězce, který představuje hodnotu 1000 Double , například proto, že hodnota 1000 je reprezentována různými jazykovými verzemi.)

activationAttributes
Object[]

Pole jednoho nebo několika atributů, které se mohou podílet na aktivaci. Obvykle pole obsahující jeden UrlAttribute objekt, který určuje adresu URL, která je nutná k aktivaci vzdáleného objektu. Tento parametr souvisí s objekty aktivovanými klientem. Aktivace klienta je starší technologie, která se zachovává kvůli zpětné kompatibilitě, ale nedoporučuje se pro nový vývoj. Distribuované aplikace by místo toho měly používat Windows Communication Foundation.

Návraty

Instance zadaného typu nebo null pokud typeName nebyla nalezena. Zadané argumenty slouží k překladu typu a k vytvoření vazby konstruktoru, který se používá k vytvoření instance.

Implementuje

Výjimky

typeName je prázdný řetězec ("") nebo řetězec začínající znakem null.

-nebo-

Aktuální sestavení bylo načteno do kontextu jen pro reflexi.

typeName je null.

Nebyl nalezen žádný odpovídající konstruktor.

Neprázdné pole atributů aktivace je předáno typu, který nedědí z MarshalByRefObject.

typeName vyžaduje závislé sestavení, které nebylo nalezeno.

typeName vyžaduje závislé sestavení, které bylo nalezeno, ale nebylo možné ho načíst.

-nebo-

Aktuální sestavení bylo načteno do kontextu pouze pro reflexi a typeName vyžaduje závislé sestavení, které nebylo předem načteno.

typeName vyžaduje závislé sestavení, ale soubor není platným sestavením pro aktuálně načtený modul runtime.

Platí pro