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


Assembly.CreateInstance Метод

Определение

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

Перегрузки

Имя Описание
CreateInstance(String)

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

CreateInstance(String, Boolean)

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

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

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

CreateInstance(String)

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

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

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

Параметры

typeName
String

Тип FullName для поиска.

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

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

Реализации

Атрибуты

Исключения

typeName — пустая строка ("") или строка, начинающаяся с символа NULL.

–или–

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

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
Исходный код:
Assembly.cs
Исходный код:
Assembly.cs

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

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

Параметры

typeName
String

Тип FullName для поиска.

ignoreCase
Boolean

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

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

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

Реализации

Атрибуты

Исключения

typeName — пустая строка ("") или строка, начинающаяся с символа NULL.

–или–

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

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

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
Исходный код:
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);
[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

Параметры

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 — пустая строка ("") или строка, начинающаяся с символа NULL.

–или–

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

typeName равно null.

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

Массив атрибутов активации, отличный от пустого, передается в тип, от который не наследуется MarshalByRefObject.

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

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

–или–

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

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

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