Activator.CreateInstance 方法

定義

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

多載

CreateInstance(AppDomain, String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
已淘汰.

使用最符合指定參數的具名組件和建構函式,建立已在指定遠端網域中具有指定名稱之類型的執行個體。

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

使用最符合指定參數的具名組件和建構函式,建立已在指定遠端網域中具有指定名稱之類型的執行個體。

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

使用具名組件和最符合指定參數的建構函式,建立已具有指定名稱之類型的執行個體。

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo, Object[])

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo)

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

CreateInstance(Type, Object[], Object[])

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

CreateInstance(String, String, Object[])

使用具名組件和無參數建構函式,建立具有已指定名稱的 COM 物件執行個體。

CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
已淘汰.

使用具名組件和最符合指定參數的建構函式,建立已具有指定名稱之類型的執行個體。

CreateInstance(Type, Object[])

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

CreateInstance(Type, Boolean)

使用所指定類型的無參數建構函式,建立該類型的執行個體。

CreateInstance(String, String)

使用具名組件和無參數建構函式,建立具有已指定名稱的 COM 物件執行個體。

CreateInstance(ActivationContext, String[])

建立類型的執行個體,這個類型是由指定的 ActivationContext 物件所指派,並且是以指定的自訂啟動資料所啟動。

CreateInstance(Type)

使用所指定類型的無參數建構函式,建立該類型的執行個體。

CreateInstance(ActivationContext)

建立類型的執行個體,這個類型是由指定的 ActivationContext 物件所指派。

CreateInstance(AppDomain, String, String)

使用具名組件和無參數建構函式,建立已在指定遠端網域中具有指定名稱的類型執行個體。

CreateInstance<T>()

使用無參數建構函式,建立由指定之泛型類型參數所指定之類型的執行個體。

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

警告

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

使用最符合指定參數的具名組件和建構函式,建立已在指定遠端網域中具有指定名稱之類型的執行個體。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(AppDomain ^ domain, System::String ^ assemblyName, 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::Security::Policy::Evidence ^ securityAttributes);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
static member CreateInstance : AppDomain * string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
[<System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
[<System.Security.SecurityCritical>]
static member CreateInstance : AppDomain * string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (domain As AppDomain, assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object(), securityAttributes As Evidence) As ObjectHandle

參數

domain
AppDomain

要在其中建立名稱為 typeName 之類型的網域。

assemblyName
String

要在其中搜尋名稱為 typeName 之類型的組件名稱。 如果 assemblyNamenull,則會搜尋執行中的組件。

typeName
String

要建立執行個體的類型完整名稱。

ignoreCase
Boolean

true 指定 typeName 的搜尋不區分大小寫,false 指定搜尋區分大小寫。

bindingAttr
BindingFlags

零或多個位元旗標的組合,此位元旗標會影響 typeName 建構函式的搜尋。 如果 bindingAttr 為零,則會針對公用建構函式執行區分大小寫的搜尋。

binder
Binder

物件,使用 bindingAttrargs 來搜尋及識別 typeName 建構函式。 如果 bindernull,則會使用預設繫結器。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

culture
CultureInfo

特定文化特性的資訊,其可控制 args 到型式類型 (為 typeName 建構函式宣告) 的強制轉型。 如果 culturenull,會使用目前執行緒的 CultureInfo

activationAttributes
Object[]

一或多個屬性的陣列,此屬性可參與啟動過程。 這通常是包含單一 UrlAttribute 物件的陣列。 UrlAttribute 會指定啟動遠端物件所需的 URL。

securityAttributes
Evidence

用來執行安全性原則決策和授權程式碼使用權限的資訊。

傳回

必須解除包裝的控制碼,才能存取新建立的物件,或是 null 沒有 Nullable<T> 值的實例。

屬性

例外狀況

domaintypeNamenull

找不到相符的建構函式。

assemblyName 中找不到 typename

找不到 assemblyName

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

透過反映叫用並擲回例外狀況的建構函式。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

activationAttributes 不是空的陣列,而建立中的類型不是衍生自 MarshalByRefObject

-或-

最符合 args 的建構函式有 varargs 引數。

assemblyName 不是有效的組件。

-或-

目前載入的是 Common Language Runtime (CLR) 2.0 版或更新版本,且已使用比目前載入之版本更新的 CLR 版本來編譯 assemblyName。 請注意,.NET Framework 2.0、3.0 和 3.5 版全部都會使用 CLR 2.0 版。

使用兩個不同的辨識項載入組件或模組兩次。

-或-

組件名稱或程式碼基底無效。

備註

當主機需要在具有限制安全性許可權的應用程式域中執行程式碼時,請使用 CreateInstance

使用 ObjectHandle.Unwrap 解除包裝傳回值。

適用於

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

使用最符合指定參數的具名組件和建構函式,建立已在指定遠端網域中具有指定名稱之類型的執行個體。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(AppDomain ^ domain, System::String ^ assemblyName, 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.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
[<System.Security.SecurityCritical>]
static member CreateInstance : AppDomain * string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (domain As AppDomain, assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As ObjectHandle

參數

domain
AppDomain

要在其中建立名稱為 typeName 之類型的網域。

assemblyName
String

要在其中搜尋名稱為 typeName 之類型的組件名稱。 如果 assemblyNamenull,則會搜尋執行中的組件。

typeName
String

要建立執行個體的類型完整名稱。

ignoreCase
Boolean

true 指定 typeName 的搜尋不區分大小寫,false 指定搜尋區分大小寫。

bindingAttr
BindingFlags

零或多個位元旗標的組合,此位元旗標會影響 typeName 建構函式的搜尋。 如果 bindingAttr 為零,則會針對公用建構函式執行區分大小寫的搜尋。

binder
Binder

物件,使用 bindingAttrargs 來搜尋及識別 typeName 建構函式。 如果 bindernull,則會使用預設繫結器。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

culture
CultureInfo

特定文化特性的資訊,其可控制 args 到型式類型 (為 typeName 建構函式宣告) 的強制轉型。 如果 culturenull,會使用目前執行緒的 CultureInfo

activationAttributes
Object[]

一或多個屬性的陣列,此屬性可參與啟動過程。 陣列通常只會包含一個 UrlAttribute 物件來指定用以啟動遠端物件的 URL。

此參數與啟動了用戶端的物件相關。 用戶端啟動是一項舊的技術,保留目的在提供回溯相容性,不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。

傳回

必須解除包裝的控制碼,才能存取新建立的物件,或是 nullNullable<T> 沒有值的 實例。

屬性

例外狀況

domaintypeNamenull

找不到相符的建構函式。

assemblyName 中找不到 typename

找不到 assemblyName

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

透過反映叫用並擲回例外狀況的建構函式。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

activationAttributes 不是空的陣列,而建立中的類型不是衍生自 MarshalByRefObject

-或-

最符合 args 的建構函式有 varargs 引數。

assemblyName 不是有效的組件。

-或-

目前載入的是 Common Language Runtime (CLR) 2.0 版或更新版本,且已使用比目前載入之版本更新的 CLR 版本來編譯 assemblyName。 請注意,.NET Framework 2.0、3.0 和 3.5 版全部都會使用 CLR 2.0 版。

使用兩個不同的辨識項載入組件或模組兩次。

-或-

組件名稱或程式碼基底無效。

備註

當主機需要在具有限制安全性許可權的應用程式域中執行程式碼時,請使用 CreateInstance

使用 ObjectHandle.Unwrap 解除包裝傳回值。

適用於

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

來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs

使用具名組件和最符合指定參數的建構函式,建立已具有指定名稱之類型的執行個體。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, 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 static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
static member CreateInstance : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As ObjectHandle

參數

assemblyName
String

要在其中搜尋名稱為 typeName 之類型的組件名稱。 如果 assemblyNamenull,則會搜尋執行中的組件。

typeName
String

要建立執行個體的類型完整名稱。

ignoreCase
Boolean

true 指定 typeName 的搜尋不區分大小寫,false 指定搜尋區分大小寫。

bindingAttr
BindingFlags

零或多個位元旗標的組合,此位元旗標會影響 typeName 建構函式的搜尋。 如果 bindingAttr 為零,則會針對公用建構函式執行區分大小寫的搜尋。

binder
Binder

物件,使用 bindingAttrargs 來搜尋及識別 typeName 建構函式。 如果 bindernull,則會使用預設繫結器。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

culture
CultureInfo

特定文化特性的資訊,其可控制 args 到型式類型 (為 typeName 建構函式宣告) 的強制轉型。 如果 culturenull,會使用目前執行緒的 CultureInfo

activationAttributes
Object[]

一或多個屬性的陣列,此屬性可參與啟動過程。 陣列通常只會包含一個 UrlAttribute 物件來指定用以啟動遠端物件的 URL。

此參數與啟動了用戶端的物件相關。 用戶端啟動是一項舊的技術,保留目的在提供回溯相容性,不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。

傳回

必須解除包裝的控制碼,才能存取新建立的實例,或是 nullNullable<T> 沒有值的實例。

例外狀況

typeNamenull

找不到相符的建構函式。

assemblyName 中找不到 typename

找不到 assemblyName

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

透過反映叫用並擲回例外狀況的建構函式。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

activationAttributes 不是空的陣列,而建立中的類型不是衍生自 MarshalByRefObject

-或-

最符合 args 的建構函式有 varargs 引數。

assemblyName 不是有效的組件。

-或-

目前載入的是 Common Language Runtime (CLR) 2.0 版或更新版本,且已使用比目前載入之版本更新的 CLR 版本來編譯 assemblyName。 請注意,.NET Framework 2.0、3.0 和 3.5 版全部都會使用 CLR 2.0 版。

使用兩個不同的辨識項載入組件或模組兩次。

-或-

組件名稱或程式碼基底無效。

備註

使用 ObjectHandle.Unwrap 解除包裝傳回值。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫者,以及包含非公用類型和成員的元件授與集,則這個方法可用來建立非公用類型和成員,或是其子集。 (請參閱 Reflection.) 的安全性考慮若要使用此功能,您的應用程式應以 .NET Framework 3.5 或更新版本為目標。

適用於

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo, Object[])

來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

public:
 static System::Object ^ CreateInstance(Type ^ type, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public static object? CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public static object CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
static member CreateInstance : Type * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
Public Shared Function CreateInstance (type As Type, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As Object

參數

type
Type

要建立之物件的類型。

bindingAttr
BindingFlags

零或多個位元旗標的組合,此位元旗標會影響 type 建構函式的搜尋。 如果 bindingAttr 為零,則會針對公用建構函式執行區分大小寫的搜尋。

binder
Binder

物件,使用 bindingAttrargs 來搜尋及識別 type 建構函式。 如果 bindernull,則會使用預設繫結器。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

culture
CultureInfo

特定文化特性的資訊,其可控制 args 到型式類型 (為 type 建構函式宣告) 的強制轉型。 如果 culturenull,會使用目前執行緒的 CultureInfo

activationAttributes
Object[]

一或多個屬性的陣列,此屬性可參與啟動過程。 陣列通常只會包含一個 UrlAttribute 物件來指定用以啟動遠端物件的 URL。

此參數與啟動了用戶端的物件相關。 用戶端啟動是一項舊的技術,保留目的在提供回溯相容性,不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。

傳回

新建立之物件的參考,或 null 針對 Nullable<T> 沒有值的實例參考。

例外狀況

typenull

type 不是 RuntimeType

-或-

type 是開放式泛型類型 (也就是 ContainsGenericParameters 屬性會傳回 true)。

type 不可以是 TypeBuilder

-或-

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

activationAttributes 不是空的陣列,而建立中的類型不是衍生自 MarshalByRefObject

-或-

包含 type 的組件是以 Save 建立的動態組件。

-或-

最符合 args 的建構函式有 varargs 引數。

正在呼叫的建構函式擲回例外狀況。

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

找不到相符的建構函式。

type 是 COM 物件,但用來取得類型的類別識別項無效,或已識別的類別未經登錄。

type 不是有效的類型。

備註

要叫用的建構函式必須在指定系結器和系結屬性的條件約束下,提供最特定的相符專案與指定的引數清單。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,以及非公用類型和成員的授與集限制為呼叫端的授與集或子集,則這個方法可用來存取非公用類型和成員。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo)

來源:
Activator.cs
來源:
Activator.cs
來源:
Activator.cs

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

public:
 static System::Object ^ CreateInstance(Type ^ type, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public static object? CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture);
public static object CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture);
static member CreateInstance : Type * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Shared Function CreateInstance (type As Type, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo) As Object

參數

type
Type

要建立之物件的類型。

bindingAttr
BindingFlags

零或多個位元旗標的組合,此位元旗標會影響 type 建構函式的搜尋。 如果 bindingAttr 為零,則會針對公用建構函式執行區分大小寫的搜尋。

binder
Binder

物件,使用 bindingAttrargs 來搜尋及識別 type 建構函式。 如果 bindernull,則會使用預設繫結器。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

culture
CultureInfo

特定文化特性的資訊,其可控制 args 到型式類型 (為 type 建構函式宣告) 的強制轉型。 如果 culturenull,會使用目前執行緒的 CultureInfo

傳回

新建立之物件的參考,或 null 針對 Nullable<T> 沒有值的實例參考。

例外狀況

typenull

type 不是 RuntimeType

-或-

type 是開放式泛型類型 (也就是 ContainsGenericParameters 屬性會傳回 true)。

type 不可以是 TypeBuilder

-或-

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

包含 type 的組件是以 Save 建立的動態組件。

-或-

最符合 args 的建構函式有 varargs 引數。

正在呼叫的建構函式擲回例外狀況。

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

找不到相符的建構函式。

type 是 COM 物件,但用來取得類型的類別識別項無效,或已識別的類別未經登錄。

type 不是有效的類型。

備註

要叫用的建構函式必須在指定系結器和系結屬性的條件約束下,提供最特定的相符專案與指定的引數清單。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,而且包含非公用類型的元件授與集,而且成員的授與集限制為呼叫端的授與集或子集,則這個方法可用來存取非公用類型和成員。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(Type, Object[], Object[])

來源:
Activator.cs
來源:
Activator.cs
來源:
Activator.cs

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

public:
 static System::Object ^ CreateInstance(Type ^ type, cli::array <System::Object ^> ^ args, cli::array <System::Object ^> ^ activationAttributes);
public static object? CreateInstance (Type type, object?[]? args, object?[]? activationAttributes);
public static object CreateInstance (Type type, object[] args, object[] activationAttributes);
static member CreateInstance : Type * obj[] * obj[] -> obj
Public Shared Function CreateInstance (type As Type, args As Object(), activationAttributes As Object()) As Object

參數

type
Type

要建立之物件的類型。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

activationAttributes
Object[]

一或多個屬性的陣列,此屬性可參與啟動過程。 陣列通常只會包含一個 UrlAttribute 物件來指定用以啟動遠端物件的 URL。

此參數與啟動了用戶端的物件相關。 用戶端啟動是一項舊的技術,保留目的在提供回溯相容性,不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。

傳回

新建立之物件的參考,或 null 針對 Nullable<T> 沒有值的實例參考。

例外狀況

typenull

type 不是 RuntimeType

-或-

type 是開放式泛型類型 (也就是 ContainsGenericParameters 屬性會傳回 true)。

type 不可以是 TypeBuilder

-或-

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

activationAttributes 不是空的陣列,而建立中的類型不是衍生自 MarshalByRefObject

-或-

包含 type 的組件是以 Save 建立的動態組件。

-或-

最符合 args 的建構函式有 varargs 引數。

正在呼叫的建構函式擲回例外狀況。

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

找不到相符的公用建構函式。

type 是 COM 物件,但用來取得類型的類別識別項無效,或已識別的類別未經登錄。

type 不是有效的類型。

備註

要叫用的建構函式必須可供存取,而且必須提供最特定的相符專案與指定的引數清單。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,而且包含非公用類型的元件授與集僅限於呼叫端的授與集或子集,這個方法就可以用來存取非公用類型。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(String, String, Object[])

來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs

使用具名組件和無參數建構函式,建立具有已指定名稱的 COM 物件執行個體。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName, object?[]? activationAttributes);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, object[] activationAttributes);
static member CreateInstance : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String, activationAttributes As Object()) As ObjectHandle

參數

assemblyName
String

要在其中搜尋名稱為 typeName 之類型的組件名稱。 如果 assemblyNamenull,則會搜尋執行中的組件。

typeName
String

要建立執行個體的類型完整名稱。

activationAttributes
Object[]

一或多個屬性的陣列,此屬性可參與啟動過程。 陣列通常只會包含一個 UrlAttribute 物件來指定用以啟動遠端物件的 URL。

此參數與啟動了用戶端的物件相關。 用戶端啟動是一項舊的技術,保留目的在提供回溯相容性,不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。

傳回

必須解除包裝才能存取新建立之物件的控制碼,或 null 實例 Nullable<T> 的控制碼。

例外狀況

typeNamenull

找不到相符的公用建構函式。

assemblyName 中找不到 typename

找不到 assemblyName

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

activationAttributes 不是空的陣列,而建立中的類型不是衍生自 MarshalByRefObject

-或-

activationAttributes 不是 UrlAttribute

陣列。

assemblyName 不是有效的組件。

-或-

目前載入的是 Common Language Runtime (CLR) 2.0 版或更新版本,且已使用比目前載入之版本更新的 CLR 版本來編譯 assemblyName。 請注意,.NET Framework 2.0、3.0 和 3.5 版全部都會使用 CLR 2.0 版。

使用兩個不同的辨識項載入組件或模組兩次。

-或-

組件名稱或程式碼基底無效。

叫用的建構函式擲回例外狀況。

-或-

嘗試在 activationAttributes 所指定之目標中進行遠端啟動時發生錯誤。

備註

使用 ObjectHandle.Unwrap 解除包裝傳回值。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,而且非公用類型的授與集限制為呼叫端的授與集或子集,則這個方法可用來建立非公用類型。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

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

警告

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

使用具名組件和最符合指定參數的建構函式,建立已具有指定名稱之類型的執行個體。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, 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::Security::Policy::Evidence ^ securityInfo);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityInfo);
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityInfo);
static member CreateInstance : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
[<System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
static member CreateInstance : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object(), securityInfo As Evidence) As ObjectHandle

參數

assemblyName
String

要在其中搜尋名稱為 typeName 之類型的組件名稱。 如果 assemblyNamenull,則會搜尋執行中的組件。

typeName
String

要建立執行個體的類型完整名稱。

ignoreCase
Boolean

true 指定 typeName 的搜尋不區分大小寫,false 指定搜尋區分大小寫。

bindingAttr
BindingFlags

零或多個位元旗標的組合,此位元旗標會影響 typeName 建構函式的搜尋。 如果 bindingAttr 為零,則會針對公用建構函式執行區分大小寫的搜尋。

binder
Binder

物件,使用 bindingAttrargs 來搜尋及識別 typeName 建構函式。 如果 bindernull,則會使用預設繫結器。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

culture
CultureInfo

特定文化特性的資訊,其可控制 args 到型式類型 (為 typeName 建構函式宣告) 的強制轉型。 如果 culturenull,會使用目前執行緒的 CultureInfo

activationAttributes
Object[]

一或多個屬性的陣列,此屬性可參與啟動過程。 陣列通常只會包含一個 UrlAttribute 物件來指定用以啟動遠端物件的 URL。

此參數與啟動了用戶端的物件相關。 用戶端啟動是一項舊的技術,保留目的在提供回溯相容性,不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。

securityInfo
Evidence

用來執行安全性原則決策和授權程式碼使用權限的資訊。

傳回

必須解除包裝的控制碼,才能存取新建立的物件,或是 null 沒有 Nullable<T> 值的實例。

屬性

例外狀況

typeNamenull

找不到相符的建構函式。

assemblyName 中找不到 typename

找不到 assemblyName

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

透過反映叫用並擲回例外狀況的建構函式。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

activationAttributes 不是空的陣列,而建立中的類型不是衍生自 MarshalByRefObject

-或-

最符合 args 的建構函式有 varargs 引數。

assemblyName 不是有效的組件。

-或-

目前載入的是 Common Language Runtime (CLR) 2.0 版或更新版本,且已使用比目前載入之版本更新的 CLR 版本來編譯 assemblyName。 請注意,.NET Framework 2.0、3.0 和 3.5 版全部都會使用 CLR 2.0 版。

使用兩個不同的辨識項載入組件或模組兩次。

-或-

組件名稱或程式碼基底無效。

備註

使用 ObjectHandle.Unwrap 解除包裝傳回值。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,以及包含非公用類型和成員的元件授與集,這個方法可用來建立非公用類型和成員的成員,或是限制為呼叫端的授與集或子集。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(Type, Object[])

來源:
Activator.cs
來源:
Activator.cs
來源:
Activator.cs

使用最符合指定之參數的建構函式,建立指定之類型的執行個體。

public:
 static System::Object ^ CreateInstance(Type ^ type, ... cli::array <System::Object ^> ^ args);
public:
 static System::Object ^ CreateInstance(Type ^ type, cli::array <System::Object ^> ^ args);
public static object CreateInstance (Type type, params object[] args);
public static object? CreateInstance (Type type, params object?[]? args);
public static object CreateInstance (Type type, object[] args);
static member CreateInstance : Type * obj[] -> obj
Public Shared Function CreateInstance (type As Type, ParamArray args As Object()) As Object
Public Shared Function CreateInstance (type As Type, args As Object()) As Object

參數

type
Type

要建立之物件的類型。

args
Object[]

符合建構函式要叫用之參數的數目、順序和類型的引數陣列。 如果 args 是空陣列或 null,則會叫用未採用參數的建構函式 (無參數建構函式)。

傳回

新建立之物件的參考,或 null 針對 Nullable<T> 沒有值的實例參考。

例外狀況

typenull

type 不是 RuntimeType

-或-

type 是開放式泛型類型 (也就是 ContainsGenericParameters 屬性會傳回 true)。

type 不可以是 TypeBuilder

-或-

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

包含 type 的組件是以 Save 建立的動態組件。

-或-

最符合 args 的建構函式有 varargs 引數。

正在呼叫的建構函式擲回例外狀況。

呼叫端沒有呼叫這個建構函式的權限。

注意:在 適用于 Windows 市集應用程式的 .NET可攜式類別庫中,改為攔截基類例外狀況 MemberAccessException

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

找不到相符的公用建構函式。

注意:在 適用于 Windows 市集應用程式的 .NET可攜式類別庫中,改為攔截基類例外狀況 MissingMemberException

type 是 COM 物件,但用來取得類型的類別識別項無效,或已識別的類別未經登錄。

type 不是有效的類型。

範例

下列範例會 CreateInstance(Type, Object[]) 呼叫 方法來建立 String 物件。 它會呼叫 建 String.String(Char[], Int32, Int32) 構函式,以具現化字串,此字串包含從第十四個位置開始的字元陣列中的十個專案。

using System;

public class Example
{
   public static void Main()
   {
      // Initialize array of characters from a to z.
      char[] chars = new char[26];
      for (int ctr = 0; ctr < 26; ctr++)
         chars[ctr] = (char) (ctr + 0x0061);

      object obj = Activator.CreateInstance(typeof(string),
                                            new object[] { chars, 13, 10 } );
      Console.WriteLine(obj);
   }
}
// The example displays the following output:
//       nopqrstuvw
open System

// Initialize array of characters from a to z.
let chars = [| 'a' .. 'z' |]

let obj = Activator.CreateInstance(typeof<string>, chars[13..22])

printfn $"{obj}"

// The example displays the following output:
//       nopqrstuvw
Module Example
   Public Sub Main()
      ' Initialize array of characters from a to z.
      Dim chars(25) As Char 
      For ctr As Short = 0 To 25
         chars(ctr) = ChrW(ctr + &h0061)
      Next 
      Dim obj As Object = Activator.CreateInstance(GetType(String),
                                                   { chars, 13, 10 })
      Console.WriteLine(obj)                                          
   End Sub
End Module
' The example displays the following output:
'       nopqrstuvw

下列範例會建立不規則陣列,其元素是要傳遞至 String 建構函式的引數。 然後範例會將每個陣列傳遞至 方法, CreateInstance(Type, Object[]) 以叫用適當的字串建構函式。

using System;

public class Example
{
   public static void Main()
   {
      char[] characters = { 'a', 'b', 'c', 'd', 'e', 'f' };
      object[][] arguments = new object[3][] { new object[] { characters },
                                               new object[] { characters, 1, 4 },
                                               new object[] { characters[1], 20 } };

      for (int ctr = 0; ctr <= arguments.GetUpperBound(0); ctr++) {
         object[] args = arguments[ctr];
         object result = Activator.CreateInstance(typeof(string), args);
         Console.WriteLine("{0}: {1}", result.GetType().Name, result);
      }
   }
}
// The example displays the following output:
//    String: abcdef
//    String: bcde
//    String: bbbbbbbbbbbbbbbbbbbb
open System

let chars = [| 'a' .. 'f' |]

let arguments =
    [| chars
       chars[1..4]
       Array.create 20 chars[1] |]

for args in arguments do
    let result =
        Activator.CreateInstance(typeof<string>, args)

    printfn $"{result.GetType().Name}: {result}"

// The example displays the following output:
//    String: abcdef
//    String: bcde
//    String: bbbbbbbbbbbbbbbbbbbb
Module Example
   Public Sub Main()
      Dim characters() As Char = { "a"c, "b"c, "c"c, "d"c, "e"c, "f"c }
      Dim arguments()() As Object = new Object(2)() { New Object() { characters },
                                                      New Object() { characters, 1, 4 },
                                                      New Object() { characters(1), 20 } }

      For ctr As Integer = 0 To arguments.GetUpperBound(0)
         Dim args() As Object = arguments(ctr)
         Dim result As Object = Activator.CreateInstance(GetType(String), args)
         Console.WriteLine("{0}: {1}", result.GetType().Name, result)
      Next
   End Sub
End Module
' The example displays the following output:
'       String: abcdef
'       String: bcde
'       String: bbbbbbbbbbbbbbbbbbbb

備註

要叫用的建構函式必須可供存取,而且必須提供最特定的相符專案與指定的引數清單。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,而且包含非公用類型的元件授與集僅限於呼叫端的授與集或子集,這個方法就可以用來存取非公用類型。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(Type, Boolean)

來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs

使用所指定類型的無參數建構函式,建立該類型的執行個體。

public:
 static System::Object ^ CreateInstance(Type ^ type, bool nonPublic);
public static object? CreateInstance (Type type, bool nonPublic);
public static object CreateInstance (Type type, bool nonPublic);
static member CreateInstance : Type * bool -> obj
Public Shared Function CreateInstance (type As Type, nonPublic As Boolean) As Object

參數

type
Type

要建立之物件的類型。

nonPublic
Boolean

如果公用或非公用無參數建構函式可相符,則為 true;如果只有公用無參數建構函式可相符,則為 false

傳回

新建立之物件的參考,或 null 實例 Nullable<T> 的參考。

例外狀況

typenull

type 不是 RuntimeType

-或-

type 是開放式泛型類型 (也就是 ContainsGenericParameters 屬性會傳回 true)。

type 不可以是 TypeBuilder

-或-

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

包含 type 的組件是以 Save 建立的動態組件。

正在呼叫的建構函式擲回例外狀況。

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

找不到相符的公用建構函式。

type 是 COM 物件,但用來取得類型的類別識別項無效,或已識別的類別未經登錄。

type 不是有效的類型。

備註

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,而且包含非公用類型的元件授與集,而且成員的授與集限制為呼叫端的授與集或子集,則這個方法可用來存取非公用類型和成員。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(String, String)

來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs

使用具名組件和無參數建構函式,建立具有已指定名稱的 COM 物件執行個體。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName);
public static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName);
static member CreateInstance : string * string -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String) As ObjectHandle

參數

assemblyName
String

要在其中搜尋名稱為 typeName 之類型的組件名稱。 如果 assemblyNamenull,則會搜尋執行中的組件。

typeName
String

要建立執行個體的類型完整名稱。

傳回

必須解除包裝才能存取新建立之物件的控制碼,或 null 實例 Nullable<T> 的控制碼。

例外狀況

typeNamenull

找不到相符的公用建構函式。

assemblyName 中找不到 typename

找不到 assemblyName

呼叫端沒有呼叫這個建構函式的權限。

您無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

透過反映叫用並擲回例外狀況的建構函式。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

assemblyName 不是有效的組件。

-或-

目前載入的是 Common Language Runtime (CLR) 2.0 版或更新版本,且已使用比目前載入之版本更新的 CLR 版本來編譯 assemblyName。 請注意,.NET Framework 2.0、3.0 和 3.5 版全部都會使用 CLR 2.0 版。

使用兩個不同的辨識項載入組件或模組兩次。

-或-

組件名稱或程式碼基底無效。

範例

下列範例會在名為 的元件中定義名為 PersonPersonInfo 類別。 請注意,類別 Person 有兩個建構函式,其中一個是無參數的。

using System;

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;
   }
}
type Person(name) =
    member val Name = name with get, set

    override this.ToString() = this.Name

    new () = Person Unchecked.defaultof<string>
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

下列範例會 CreateInstance(String, String) 呼叫 方法來具現化 Person 類別。 它需要將參考新增至專案 PersonInfo.dll。 CreateInstance(String, String)因為 方法會呼叫 Person 類別無參數建構函式,所以範例會將值指派給其 Name 屬性。

using System;
using System.Runtime.Remoting;

public class Example
{
   public static void Main()
   {
      ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
      Person p = (Person) handle.Unwrap();
      p.Name = "Samuel";
      Console.WriteLine(p);
   }
}
// The example displays the following output:
//        Samuel
open System

let handle = Activator.CreateInstance("PersonInfo", "Person")
let p = handle.Unwrap() :?> Person
p.Name <- "Samuel"
printfn $"{p}"

// The example displays the following output:
//        Samuel
Imports System.Runtime.Remoting

Module Example
   Public Sub Main()
      Dim handle As ObjectHandle = Activator.CreateInstance("PersonInfo", "Person")
      Dim p As Person = CType(handle.Unwrap(), Person)
      p.Name = "Samuel"
      Console.WriteLine(p)
   End Sub
End Module
' The example displays the following output:
'       Samuel

不過,經常呼叫 以 CreateInstance 具現化跨電腦界限或設計階段不知道的類型。 在此情況下,您無法在專案中包含元件的參考,也無法對類型的成員進行早期系結呼叫。 為了因應這項限制,下列範例會 CreateInstance 使用 方法以及反映,將值指派給 Person 物件的 Name 屬性,並顯示其值。

using System;
using System.Reflection;
using System.Runtime.Remoting;

public class Example
{
   public static void Main()
   {
      ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
      object p = handle.Unwrap();
      Type t = p.GetType();
      PropertyInfo prop = t.GetProperty("Name");
      if (prop != null)
         prop.SetValue(p, "Samuel");

      MethodInfo method = t.GetMethod("ToString");
      object retVal = method.Invoke(p, null);
      if (retVal != null)
         Console.WriteLine(retVal);
   }
}
// The example displays the following output:
//        Samuel
open System

let handle =
    Activator.CreateInstance("PersonInfo", "Person")

let p = handle.Unwrap()
let t = p.GetType()
let prop = t.GetProperty "Name"

if not (isNull prop) then
    prop.SetValue(p, "Samuel")

let method = t.GetMethod "ToString"
let retVal = method.Invoke(p, null)

if not (isNull retVal) then
    printfn $"{retVal}"

// The example displays the following output:
//        Samuel
Imports System.Reflection
Imports System.Runtime.Remoting

Module Example
   Public Sub Main()
      Dim handle As ObjectHandle = Activator.CreateInstance("PersonInfo", "Person")
      Dim p As Object = handle.Unwrap()
      Dim t As Type = p.GetType()
      Dim prop As PropertyInfo = t.GetProperty("Name")
      if Not prop Is Nothing Then
         prop.SetValue(p, "Samuel")
      End If   
      Dim method As MethodInfo = t.GetMethod("ToString")
      Dim retVal As Object = method.Invoke(p, Nothing) 
      If Not retVal Is Nothing Then
         Console.WriteLine(retVal)
      End If
   End Sub
End Module
' The example displays the following output:
'       Samuel

備註

使用 ObjectHandle.Unwrap 解除包裝傳回值。

assemblyName 可以是下列其中一項:

  • 元件的簡單名稱,不含其路徑或副檔名。 例如,您會針對路徑和名稱為 .\bin\TypeExtensions.dll 的元件指定 TypeExtensions

  • 已簽署元件的完整名稱,其中包含其簡單名稱、版本、文化特性和公開金鑰權杖;例如,「TypeExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=181869f2f7435b51」。

如需 Common Language Runtime 如何識別及載入元件的詳細資訊,請參閱 執行時間如何找出元件。 如需使用應用程式組態檔定義元件位置的資訊,請參閱 指定元件的位置。 如果 assemblyName 找到,則會在預設內容中載入它。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,而且包含非公用類型的元件授與集限制為呼叫端的授與集或子集,則這個方法可用來建立非公用類型。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(ActivationContext, String[])

建立類型的執行個體,這個類型是由指定的 ActivationContext 物件所指派,並且是以指定的自訂啟動資料所啟動。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(ActivationContext ^ activationContext, cli::array <System::String ^> ^ activationCustomData);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (ActivationContext activationContext, string[] activationCustomData);
static member CreateInstance : ActivationContext * string[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (activationContext As ActivationContext, activationCustomData As String()) As ObjectHandle

參數

activationContext
ActivationContext

啟動內容物件,指定要建立的物件。

activationCustomData
String[]

Unicode 字串的陣列,包含自訂啟動資料。

傳回

必須解除包裝才能存取新建立之物件的控制碼,或 null 實例 Nullable<T> 的控制碼。

備註

ObjectHandle.Unwrap使用 方法解除包裝傳回值。

在以資訊清單為基礎的啟用期間,會使用啟用內容來設定網域原則,並提供以應用程式為基礎的安全性模型。 類別 ActivationContext 包含提供 ApplicationIdentity 應用程式資訊清單存取權的物件。 如需詳細資訊,請參閱 ApplicationSecurityManager 類別。

另請參閱

適用於

CreateInstance(Type)

來源:
Activator.cs
來源:
Activator.cs
來源:
Activator.cs

使用所指定類型的無參數建構函式,建立該類型的執行個體。

public:
 static System::Object ^ CreateInstance(Type ^ type);
public static object CreateInstance (Type type);
public static object? CreateInstance (Type type);
static member CreateInstance : Type -> obj
Public Shared Function CreateInstance (type As Type) As Object

參數

type
Type

要建立之物件的類型。

傳回

新建立之物件的參考,或 null 實例 Nullable<T> 的參考。

例外狀況

typenull

type 不是 RuntimeType

-或-

type 是開放式泛型類型 (也就是 ContainsGenericParameters 屬性會傳回 true)。

type 不可以是 TypeBuilder

-或-

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

-或-

包含 type 的組件是以 Save 建立的動態組件。

正在呼叫的建構函式擲回例外狀況。

呼叫端沒有呼叫這個建構函式的權限。

注意:在 適用于 Windows 市集應用程式的 .NET可攜式類別庫中,改為攔截基類例外狀況 MemberAccessException

無法建立抽象類別的執行個體,或者這個成員曾被晚期繫結機制叫用過。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

找不到相符的公用建構函式。

注意:在 適用于 Windows 市集應用程式的 .NET可攜式類別庫中,改為攔截基類例外狀況 MissingMemberException

type 是 COM 物件,但用來取得類型的類別識別項無效,或已識別的類別未經登錄。

type 不是有效的類型。

範例

下列程式碼範例示範如何呼叫 CreateInstance(Type) 方法。 會建立數種不同類型的實例,並顯示其預設值。

using namespace System;

ref class DynamicInstanceList
{
private:
    static String^ instanceSpec = "System.EventArgs;System.Random;" +
        "System.Exception;System.Object;System.Version";

public:
    static void Main()
    {
        array<String^>^ instances = instanceSpec->Split(';');
        Array^ instlist = Array::CreateInstance(Object::typeid, instances->Length);
        Object^ item;

        for (int i = 0; i < instances->Length; i++)
        {
            // create the object from the specification string
            Console::WriteLine("Creating instance of: {0}", instances[i]);
            item = Activator::CreateInstance(Type::GetType(instances[i]));
            instlist->SetValue(item, i);
        }
        Console::WriteLine("\nObjects and their default values:\n");
        for each (Object^ o in instlist)
        {
            Console::WriteLine("Type:     {0}\nValue:    {1}\nHashCode: {2}\n",
                o->GetType()->FullName, o->ToString(), o->GetHashCode());
        }
    }
};

int main()
{
    DynamicInstanceList::Main();
}

// This program will display output similar to the following:
//
// Creating instance of: System.EventArgs
// Creating instance of: System.Random
// Creating instance of: System.Exception
// Creating instance of: System.Object
// Creating instance of: System.Version
//
// Objects and their default values:
//
// Type:     System.EventArgs
// Value:    System.EventArgs
// HashCode: 46104728
//
// Type:     System.Random
// Value:    System.Random
// HashCode: 12289376
//
// Type:     System.Exception
// Value:    System.Exception: Exception of type 'System.Exception' was thrown.
// HashCode: 55530882
//
// Type:     System.Object
// Value:    System.Object
// HashCode: 30015890
//
// Type:     System.Version
// Value:    0.0
// HashCode: 1048575
using System;

class DynamicInstanceList
{
    private static string instanceSpec = "System.EventArgs;System.Random;" +
        "System.Exception;System.Object;System.Version";

    public static void Main()
    {
        string[] instances = instanceSpec.Split(';');
        Array instlist = Array.CreateInstance(typeof(object), instances.Length);
        object item;
        for (int i = 0; i < instances.Length; i++)
        {
            // create the object from the specification string
            Console.WriteLine("Creating instance of: {0}", instances[i]);
            item = Activator.CreateInstance(Type.GetType(instances[i]));
            instlist.SetValue(item, i);
        }
        Console.WriteLine("\nObjects and their default values:\n");
        foreach (object o in instlist)
        {
            Console.WriteLine("Type:     {0}\nValue:    {1}\nHashCode: {2}\n",
                o.GetType().FullName, o.ToString(), o.GetHashCode());
        }
    }
}

// This program will display output similar to the following:
//
// Creating instance of: System.EventArgs
// Creating instance of: System.Random
// Creating instance of: System.Exception
// Creating instance of: System.Object
// Creating instance of: System.Version
//
// Objects and their default values:
//
// Type:     System.EventArgs
// Value:    System.EventArgs
// HashCode: 46104728
//
// Type:     System.Random
// Value:    System.Random
// HashCode: 12289376
//
// Type:     System.Exception
// Value:    System.Exception: Exception of type 'System.Exception' was thrown.
// HashCode: 55530882
//
// Type:     System.Object
// Value:    System.Object
// HashCode: 30015890
//
// Type:     System.Version
// Value:    0.0
// HashCode: 1048575
open System

let instanceSpec =
    "System.EventArgs;System.Random;System.Exception;System.Object;System.Version"

let instances = instanceSpec.Split ';'
let instlist = Array.zeroCreate instances.Length
let mutable item = obj ()

for i = 0 to instances.Length - 1 do
    // create the object from the specification string
    printfn $"Creating instance of: {instances.[i]}"
    item <- Activator.CreateInstance(Type.GetType instances.[i])
    instlist.[i] <- item

printfn "\nObjects and their default values:\n"

for o in instlist do
    printfn $"Type:     {o.GetType().FullName}\nValue:    {o}\nHashCode: {o.GetHashCode()}\n"


// This program will display output similar to the following:
//
// Creating instance of: System.EventArgs
// Creating instance of: System.Random
// Creating instance of: System.Exception
// Creating instance of: System.Object
// Creating instance of: System.Version
//
// Objects and their default values:
//
// Type:     System.EventArgs
// Value:    System.EventArgs
// HashCode: 46104728
//
// Type:     System.Random
// Value:    System.Random
// HashCode: 12289376
//
// Type:     System.Exception
// Value:    System.Exception: Exception of type 'System.Exception' was thrown.
// HashCode: 55530882
//
// Type:     System.Object
// Value:    System.Object
// HashCode: 30015890
//
// Type:     System.Version
// Value:    0.0
// HashCode: 1048575
Class DynamicInstanceList
    Private Shared instanceSpec As String = "System.EventArgs;System.Random;" + _
        "System.Exception;System.Object;System.Version"

    Public Shared Sub Main()
        Dim instances() As String = instanceSpec.Split(";")
        Dim instlist As Array = Array.CreateInstance(GetType(Object), instances.Length)
        Dim item As Object

        For i As Integer = 0 To instances.Length -1
            ' create the object from the specification string
            Console.WriteLine("Creating instance of: {0}", instances(i))
            item = Activator.CreateInstance(Type.GetType(instances(i)))
            instlist.SetValue(item, i)
        Next i
        Console.WriteLine(Environment.NewLine + "Objects and their default values:" + Environment.NewLine)
        For Each o As Object In instlist
            Console.WriteLine("Type:     {0}" + Environment.NewLine + "Value:    {1}" + _
                Environment.NewLine + "HashCode: {2}" + Environment.NewLine, _
                o.GetType().FullName, o.ToString(), o.GetHashCode())
        Next o
    End Sub
End Class

' This program will display output similar to the following:
'
' Creating instance of: System.EventArgs
' Creating instance of: System.Random
' Creating instance of: System.Exception
' Creating instance of: System.Object
' Creating instance of: System.Version
'
' Objects and their default values:
'
' Type:     System.EventArgs
' Value:    System.EventArgs
' HashCode: 46104728
'
' Type:     System.Random
' Value:    System.Random
' HashCode: 12289376
'
' Type:     System.Exception
' Value:    System.Exception: Exception of type 'System.Exception' was thrown.
' HashCode: 55530882
'
' Type:     System.Object
' Value:    System.Object
' HashCode: 30015890
'
' Type:     System.Version
' Value:    0.0
' HashCode: 1048575

備註

要叫用的建構函式必須可供存取。

注意

從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授 ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess 與呼叫端,而且包含非公用類型的元件授與集僅限於呼叫端的授與集或子集,這個方法就可以用來存取非公用類型。 (請參閱 Reflection.) 的安全性考慮若要使用這項功能,您的應用程式應以 3.5 或更新版本為目標.NET Framework。

適用於

CreateInstance(ActivationContext)

建立類型的執行個體,這個類型是由指定的 ActivationContext 物件所指派。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(ActivationContext ^ activationContext);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (ActivationContext activationContext);
static member CreateInstance : ActivationContext -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (activationContext As ActivationContext) As ObjectHandle

參數

activationContext
ActivationContext

啟動內容物件,指定要建立的物件。

傳回

必須解除包裝才能存取新建立之物件的控制碼,或 null 實例 Nullable<T> 的控制碼。

備註

ObjectHandle.Unwrap使用 方法解除包裝傳回值。

在以資訊清單為基礎的啟用期間,會使用啟用內容來設定網域原則,並提供以應用程式為基礎的安全性模型。 類別 ActivationContext 包含提供 ApplicationIdentity 應用程式資訊清單存取權的物件。 如需詳細資訊,請參閱 ApplicationSecurityManager 類別。

另請參閱

適用於

CreateInstance(AppDomain, String, String)

使用具名組件和無參數建構函式,建立已在指定遠端網域中具有指定名稱的類型執行個體。

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(AppDomain ^ domain, System::String ^ assemblyName, System::String ^ typeName);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName);
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName);
static member CreateInstance : AppDomain * string * string -> System.Runtime.Remoting.ObjectHandle
[<System.Security.SecurityCritical>]
static member CreateInstance : AppDomain * string * string -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (domain As AppDomain, assemblyName As String, typeName As String) As ObjectHandle

參數

domain
AppDomain

建立名稱為 typeName 之類型的遠端網域。

assemblyName
String

要在其中搜尋名稱為 typeName 之類型的組件名稱。 如果 assemblyNamenull,則會搜尋執行中的組件。

typeName
String

要建立執行個體的類型完整名稱。

傳回

必須解除包裝才能存取新建立之物件的控制碼,或 null 實例 Nullable<T> 的控制碼。

屬性

例外狀況

typeNamedomainnull

找不到相符的公用建構函式。

assemblyName 中找不到 typename

找不到 assemblyName

呼叫端沒有呼叫這個建構函式的權限。

無法建立抽象型別的執行個體 (Instance)。

-或-

這個成員曾被晚期繫結機制叫用過。

透過反映叫用並擲回例外狀況的建構函式。

COM 類型不是透過 GetTypeFromProgIDGetTypeFromCLSID 取得。

不支援建立 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 類型或這些類型的陣列。

assemblyName 不是有效的組件。

-或-

目前載入的是 Common Language Runtime (CLR) 2.0 版或更新版本,且已使用比目前載入之版本更新的 CLR 版本來編譯 assemblyName。 請注意,.NET Framework 2.0、3.0 和 3.5 版全部都會使用 CLR 2.0 版。

使用兩個不同的辨識項載入組件或模組兩次。

-或-

組件名稱或程式碼基底無效。

備註

當主機需要在具有限制安全性許可權的應用程式域中執行程式碼時,請使用 CreateInstance

使用 ObjectHandle.Unwrap 解除包裝傳回值。

適用於

CreateInstance<T>()

來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs
來源:
Activator.RuntimeType.cs

使用無參數建構函式,建立由指定之泛型類型參數所指定之類型的執行個體。

public:
generic <typename T>
 static T CreateInstance();
public static T CreateInstance<T> ();
static member CreateInstance : unit -> 'T
Public Shared Function CreateInstance(Of T) () As T

類型參數

T

要建立的類型。

傳回

T

新建立之物件的參考,或 null 實例 Nullable<T> 的參考。

例外狀況

無法建立抽象類別的執行個體,或為 T 指定的類型沒有無參數的建構函式。

注意:在 適用于 Windows 市集應用程式的 .NET可攜式類別庫中,改為攔截基類例外狀況 MissingMemberException

備註

編譯 CreateInstance<T>() 程式會使用泛型方法來實作類型參數所指定的型別具現化。 例如,在下列泛型方法中, new T() C++ 中 (gcnew T() 實作) 使用 CreateInstance<T>() 泛型方法。

public:
    generic <typename T> where T:gcnew()
    static T Bar()
    {
        return gcnew T();
    }
public static T Factory<T>() where T : new()
{
    return new T();
}
let factory<'T when 'T : (new: unit -> 'T)> =
    new 'T()
Public Shared Function Factory(Of T As New)() As T
    Return New T()
End Function

一般而言,應用程式程式碼中的泛型方法沒有任何用途 CreateInstance<T>() ,因為類型在編譯時期必須知道。 如果類型在編譯時期已知,則一般具現化語法可以在 C#、 New Visual Basic gcnew 的 C++) 中使用 (new 運算子。 如果編譯時期不知道類型,您可以呼叫 的非泛型多載 CreateInstance

泛型方法沒有採用引數清單的多 CreateInstance<T>() 載,因為 的非泛型多載 CreateInstance 已經提供晚期繫結建構函式解析。

適用於