Поделиться через


Assembly.CreateInstance Метод

Определение

Находит тип в этой сборке и создает его экземпляр, используя абстрактный метод.

Перегрузки

CreateInstance(String)

С помощью поиска с учетом регистра находит заданный тип в этой сборке и создает его экземпляр, используя абстрактный метод.

CreateInstance(String, Boolean)

При помощи необязательного поиска с учетом регистра находит заданный тип в этой сборке и создает его экземпляр, используя абстрактный метод.

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

Находит в сборке указанный тип и создает его экземпляр с использованием системного активатора при помощи необязательного поиска с учетом регистра и с заданными аргументами, культурой, а также атрибутами привязки и активации.

CreateInstance(String)

Исходный код:
Assembly.cs
Исходный код:
Assembly.cs
Исходный код:
Assembly.cs

С помощью поиска с учетом регистра находит заданный тип в этой сборке и создает его экземпляр, используя абстрактный метод.

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

Параметры

typeName
String

FullName искомого типа.

Возвращаемое значение

Экземпляр указанного типа, созданный с использованием конструктора без параметров, или null, если typeName не найден. Тип разрешается с использованием связывателя по умолчанию, не задавая языка и региональных параметров, а также атрибутов активации, при этом для объекта BindingFlags задано значение Public или Instance.

Реализации

Исключения

Значение typeName является пустой строкой ("") или строкой, начинающейся с нуль-символа.

-или-

Текущая сборка была загружена в контекст только для отражения.

typeName имеет значение null.

Соответствующий конструктор не найден.

Для typeName требуется зависимая сборка, которую не удалось найти.

Для typeName требуется зависимая сборка, которая была найдена, но ее не удалось загрузить.

-или-

Текущая сборка была загружена в контекст только для отражения, а для typeName требуется зависимая сборка, которая не была предварительно загружена.

typeName Требуется зависимая сборка, но файл не является допустимой сборкой для текущей загруженной среды выполнения.

Примеры

В следующем примере определяется Person класс и вызывается 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'

Комментарии

Если среде выполнения не удается найти typeName в экземпляре Assembly , она возвращает null , а не создает исключение. Это может произойти по следующим причинам:

  • Вы не указали полное имя типа.

  • Вы указали полное имя типа, но его регистр не соответствует регистру свойства типа Type.FullName . Для сравнения без учета регистра typeName с полным именем типа вызовите перегрузку CreateInstance(String, Boolean) и укажите true для аргумента ignoreCase .

  • Тип не существует в текущем Assembly экземпляре.

Применяется к

CreateInstance(String, Boolean)

Исходный код:
Assembly.cs
Исходный код:
Assembly.cs
Исходный код:
Assembly.cs

При помощи необязательного поиска с учетом регистра находит заданный тип в этой сборке и создает его экземпляр, используя абстрактный метод.

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

Параметры

typeName
String

FullName искомого типа.

ignoreCase
Boolean

Значение true, чтобы игнорировать регистр имени типа, в обратном случае — значение false.

Возвращаемое значение

Экземпляр указанного типа, созданный с использованием конструктора без параметров, или null, если typeName не найден. Тип разрешается с использованием связывателя по умолчанию, не задавая языка и региональных параметров, а также атрибутов активации, при этом для объекта BindingFlags задано значение Public или Instance.

Реализации

Исключения

Значение typeName является пустой строкой ("") или строкой, начинающейся с нуль-символа.

-или-

Текущая сборка была загружена в контекст только для отражения.

Соответствующий конструктор не найден.

typeName имеет значение null.

Для typeName требуется зависимая сборка, которую не удалось найти.

Для typeName требуется зависимая сборка, которая была найдена, но ее не удалось загрузить.

-или-

Текущая сборка была загружена в контекст только для отражения, а для typeName требуется зависимая сборка, которая не была предварительно загружена.

typeName Требуется зависимая сборка, но файл не является допустимой сборкой для текущей загруженной среды выполнения.

Примеры

В следующем примере определяется класс Person. Затем он вызывает CreateInstance(String) метод для создания его экземпляра, но так как регистр typeName аргумента FullName не соответствует регистру свойства типа, метод возвращает null. Когда пример передает ту же строку перегрузке CreateInstance(String, Boolean) и указывает, что сравнение не учитывает регистр, Person класс обнаруживается и Person экземпляр объекта успешно создается.

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'

Комментарии

Если среде выполнения не удается найти typeName в экземпляре Assembly , она возвращает null , а не создает исключение. Это может произойти по следующим причинам:

  • Вы не указали полное имя типа.

  • Тип не существует в текущем Assembly экземпляре.

Применяется к

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

Исходный код:
Assembly.cs
Исходный код:
Assembly.cs
Исходный код:
Assembly.cs

Находит в сборке указанный тип и создает его экземпляр с использованием системного активатора при помощи необязательного поиска с учетом регистра и с заданными аргументами, культурой, а также атрибутами привязки и активации.

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

Параметры

typeName
String

FullName искомого типа.

ignoreCase
Boolean

Значение true, чтобы игнорировать регистр имени типа, в обратном случае — значение false.

bindingAttr
BindingFlags

Битовая маска, влияющая на способ выполнения поиска. Значение является сочетанием одноразрядных флагов из BindingFlags.

binder
Binder

Объект, позволяющий осуществлять привязку, приведение типов аргументов, вызов элементов, а также поиск объектов MemberInfo с помощью отражения. Если значение параметра binder равно null, используется связыватель по умолчанию.

args
Object[]

Массив, содержащий аргументы, передаваемые конструктору. Этот массив аргументов должен по числу, порядку и типу аргументов соответствовать параметрам вызываемого конструктора. Если нужен конструктор без параметров, то объект args должен быть пустым массивом или значением null.

culture
CultureInfo

Экземпляр объекта CultureInfo , используемого для управления приведением типов. Если значение этого объекта — null, для текущего потока используется CultureInfo. (Например, необходимо преобразовывать строку, которая представляет 1000, в значение Double, поскольку при разных языках и региональных параметрах 1000 представляется по-разному.)

activationAttributes
Object[]

Массив, состоящий из одного или нескольких атрибутов, которые могут участвовать в активации. Обычно это массив, содержащий один объект UrlAttribute, определяющий URL-адрес, необходимый для активации удаленного объекта. Этот параметр связан с объектами, активируемыми клиентом. Активация клиентом — это устаревшая технология, которая сохраняется с целью обеспечения обратной совместимости; ее не рекомендуется использовать для разработки новых приложений. Сейчас в распределенных приложениях следует использовать Windows Communication Foundation.

Возвращаемое значение

Экземпляр указанного типа или null, если typeName не найден. Предоставленные аргументы используются для разрешения типа и привязки конструктора, который используется для создания экземпляра.

Реализации

Исключения

Значение typeName является пустой строкой ("") или строкой, начинающейся с нуль-символа.

-или-

Текущая сборка была загружена в контекст только для отражения.

typeName имеет значение null.

Соответствующий конструктор не найден.

Непустой массив атрибутов активации передан в тип, который не является производным от MarshalByRefObject.

Для typeName требуется зависимая сборка, которую не удалось найти.

Для typeName требуется зависимая сборка, которая была найдена, но ее не удалось загрузить.

-или-

Текущая сборка была загружена в контекст только для отражения, а для typeName требуется зависимая сборка, которая не была предварительно загружена.

typeName Требуется зависимая сборка, но файл не является допустимой сборкой для текущей загруженной среды выполнения.

Применяется к