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