Assembly.CreateInstance 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
从此程序集中查找某个类型,然后使用系统激活器创建它的实例。
重载
CreateInstance(String) |
使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。 |
CreateInstance(String, Boolean) |
使用可选的区分大小写搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。 |
CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) |
使用可选的区分大小写搜索并具有指定的区域性、参数和绑定及激活特性,从此程序集中查找指定的类型,并使用系统激活器创建它的实例。 |
CreateInstance(String)
- Source:
- Assembly.cs
- Source:
- Assembly.cs
- Source:
- 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
,则为 null
。 该类型使用默认联编程序解析,而无需指定区域性或激活属性,并将 BindingFlags 设置为 Public
或 Instance
。
实现
例外
typeName
为 null
。
未找到匹配的构造函数。
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'
注解
如果运行时在实例中Assembly找不到typeName
,它将返回null
而不是引发异常。 出现这种情况的原因可能是:
尚未指定类型的完全限定名称。
你已指定完全限定的类型名称,但其大小写与类型属性的 Type.FullName 大小写不匹配。 对于 与类型全名不区分大小写的比较
typeName
,请调用 CreateInstance(String, Boolean) 重载并为 参数指定true
ignoreCase
。类型在当前 Assembly 实例中不存在。
适用于
CreateInstance(String, Boolean)
- Source:
- Assembly.cs
- Source:
- Assembly.cs
- Source:
- 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
。
返回
使用无参数构造函数创建的指定类型的实例;如果未找到 typeName
,则为 null
。 该类型使用默认联编程序解析,而无需指定区域性或激活属性,并将 BindingFlags 设置为 Public
或 Instance
。
实现
例外
未找到匹配的构造函数。
typeName
为 null
。
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'
注解
如果运行时在实例中Assembly找不到typeName
,它将返回null
而不是引发异常。 出现这种情况的原因可能是:
尚未指定类型的完全限定名称。
类型在当前 Assembly 实例中不存在。
适用于
CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
- Source:
- Assembly.cs
- Source:
- Assembly.cs
- Source:
- 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
为 null
。
未找到匹配的构造函数。
非空激活属性数组被传递给不是继承自 MarshalByRefObject 的类型。
typeName
所需的从属程序集无法找到。
typeName
需要依赖程序集,但文件不是当前加载的运行时的有效程序集。