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
Параметры
Возвращаемое значение
Экземпляр указанного типа, созданный с помощью конструктора без параметров; или 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
Параметры
- 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
Параметры
- 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 требует зависимой сборки, но файл не является допустимой сборкой для текущей загруженной среды выполнения.