Activator.CreateInstance 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
使用最符合指定參數的建構函式,建立指定型別的實例。
多載
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
之型別的元件名稱。 如果 assemblyName
null
,則會搜尋執行中的元件。
- typeName
- String
要建立 實例之型別的完整名稱。
- ignoreCase
- Boolean
true
指定搜尋 typeName
不區分大小寫;false
指定搜尋區分大小寫。
- bindingAttr
- BindingFlags
零個或多個位旗標的組合,會影響搜尋 typeName
建構函式。 如果 bindingAttr
為零,則會對公用建構函式進行區分大小寫的搜尋。
- binder
- Binder
物件,使用 bindingAttr
和 args
來搜尋和識別 typeName
建構函式。 如果 binder
null
,則會使用預設系結器。
- args
- Object[]
以數位、順序和輸入要叫用之建構函式參數的自變數陣列。 如果 args
是空陣列或 null
,則會叫用不採用任何參數的建構函式(無參數建構函式)。
- culture
- CultureInfo
針對 typeName
建構函式所宣告之 args
強制型別的文化特性特定資訊。 如果 culture
null
,則會使用目前線程的 CultureInfo。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是包含單一 UrlAttribute 對象的陣列。 UrlAttribute 會指定啟動遠端物件所需的 URL。
- securityAttributes
- Evidence
用來做出安全策略決策並授與程式代碼許可權的資訊。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或針對沒有值的 Nullable<T> 實例 null
。
- 屬性
例外狀況
domain
或 typeName
null
。
找不到相符的建構函式。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
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
之型別的元件名稱。 如果 assemblyName
null
,則會搜尋執行中的元件。
- typeName
- String
要建立 實例之型別的完整名稱。
- ignoreCase
- Boolean
true
指定搜尋 typeName
不區分大小寫;false
指定搜尋區分大小寫。
- bindingAttr
- BindingFlags
零個或多個位旗標的組合,會影響搜尋 typeName
建構函式。 如果 bindingAttr
為零,則會對公用建構函式進行區分大小寫的搜尋。
- binder
- Binder
物件,使用 bindingAttr
和 args
來搜尋和識別 typeName
建構函式。 如果 binder
null
,則會使用預設系結器。
- args
- Object[]
以數位、順序和輸入要叫用之建構函式參數的自變數陣列。 如果 args
是空陣列或 null
,則會叫用不採用任何參數的建構函式(無參數建構函式)。
- culture
- CultureInfo
針對 typeName
建構函式所宣告之 args
強制型別的文化特性特定資訊。 如果 culture
null
,則會使用目前線程的 CultureInfo。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是包含單一 UrlAttribute 對象的陣列,指定啟動遠端物件所需的URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或針對沒有值的 Nullable<T> 實例 null
。
- 屬性
例外狀況
domain
或 typeName
null
。
找不到相符的建構函式。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
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[])
使用最符合指定參數的具名元件和建構函式,建立指定名稱的類型實例。
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
之型別的元件名稱。 如果 assemblyName
null
,則會搜尋執行中的元件。
- typeName
- String
要建立 實例之型別的完整名稱。
- ignoreCase
- Boolean
true
指定搜尋 typeName
不區分大小寫;false
指定搜尋區分大小寫。
- bindingAttr
- BindingFlags
零個或多個位旗標的組合,會影響搜尋 typeName
建構函式。 如果 bindingAttr
為零,則會對公用建構函式進行區分大小寫的搜尋。
- binder
- Binder
物件,使用 bindingAttr
和 args
來搜尋和識別 typeName
建構函式。 如果 binder
null
,則會使用預設系結器。
- args
- Object[]
以數位、順序和輸入要叫用之建構函式參數的自變數陣列。 如果 args
是空陣列或 null
,則會叫用不採用任何參數的建構函式(無參數建構函式)。
- culture
- CultureInfo
針對 typeName
建構函式所宣告之 args
強制型別的文化特性特定資訊。 如果 culture
null
,則會使用目前線程的 CultureInfo。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是包含單一 UrlAttribute 對象的陣列,指定啟動遠端物件所需的URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
傳回
必須解除包裝的句柄,才能存取新建立的實例,或針對沒有值的 Nullable<T> 實例 null
。
例外狀況
typeName
null
。
找不到相符的建構函式。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
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 開始,如果呼叫者已使用 ReflectionPermissionFlag.RestrictedMemberAccess 旗標授與呼叫者 ReflectionPermission,以及包含非公用類型和成員的元件授與集,則這個方法可用來建立非公用類型和成員,或授與給呼叫者的授與集或子集。 (請參閱反映
適用於
CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo, Object[])
使用最符合指定參數的建構函式,建立指定型別的實例。
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
物件,使用 bindingAttr
和 args
來搜尋和識別 type
建構函式。 如果 binder
null
,則會使用預設系結器。
- args
- Object[]
以數位、順序和輸入要叫用之建構函式參數的自變數陣列。 如果 args
是空陣列或 null
,則會叫用不採用任何參數的建構函式(無參數建構函式)。
- culture
- CultureInfo
針對 type
建構函式所宣告之 args
強制型別的文化特性特定資訊。 如果 culture
null
,則會使用目前線程的 CultureInfo。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是包含單一 UrlAttribute 對象的陣列,指定啟動遠端物件所需的URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
傳回
新建立之對象的參考,或 Nullable<T> 實例沒有值的 null
。
例外狀況
type
null
。
type
不可以是 TypeBuilder。
-或-
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
activationAttributes
不是空陣列,而且所建立的類型不會衍生自 MarshalByRefObject。
-或-
包含 type
的元件是使用 Save建立的動態元件。
-或-
最符合 args
的建構函式具有 varargs
自變數。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的建構函式。
type
是 COM 物件,但用來取得型別的類別標識碼無效,或未註冊已識別的類別。
type
不是有效的類型。
備註
要叫用的建構函式必須根據所指定系結器和系結屬性的條件約束,提供最特定的比對與指定的自變數清單。
注意
從 .NET Framework 2.0 開始,如果呼叫端已使用 ReflectionPermissionFlag.RestrictedMemberAccess 旗標授與 ReflectionPermission,而且非公用類型和成員的授與集限制為呼叫端的授與集或子集,則這個方法可以用來存取非公用類型和成員。 (請參閱反映
適用於
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
物件,使用 bindingAttr
和 args
來搜尋和識別 type
建構函式。 如果 binder
null
,則會使用預設系結器。
- args
- Object[]
以數位、順序和輸入要叫用之建構函式參數的自變數陣列。 如果 args
是空陣列或 null
,則會叫用不採用任何參數的建構函式(無參數建構函式)。
- culture
- CultureInfo
針對 type
建構函式所宣告之 args
強制型別的文化特性特定資訊。 如果 culture
null
,則會使用目前線程的 CultureInfo。
傳回
新建立之對象的參考,或 Nullable<T> 實例沒有值的 null
。
例外狀況
type
null
。
type
不可以是 TypeBuilder。
-或-
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
包含 type
的元件是使用 Save建立的動態元件。
-或-
最符合 args
的建構函式具有 varargs
自變數。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的建構函式。
type
是 COM 物件,但用來取得型別的類別標識碼無效,或未註冊已識別的類別。
type
不是有效的類型。
備註
要叫用的建構函式必須根據所指定系結器和系結屬性的條件約束,提供最特定的比對與指定的自變數清單。
注意
從 .NET Framework 2.0 開始,如果呼叫者已使用 ReflectionPermissionFlag.RestrictedMemberAccess 旗標授與 ReflectionPermission,以及包含非公用類型和成員的元件授與集限制為呼叫端的授與集或子集,這個方法就可以用來存取非公用類型和成員。 (請參閱反映
適用於
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。
傳回
新建立之對象的參考,或 Nullable<T> 實例沒有值的 null
。
例外狀況
type
null
。
type
不可以是 TypeBuilder。
-或-
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
activationAttributes
不是空陣列,而且所建立的類型不會衍生自 MarshalByRefObject。
-或-
包含 type
的元件是使用 Save建立的動態元件。
-或-
最符合 args
的建構函式具有 varargs
自變數。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
type
是 COM 物件,但用來取得型別的類別標識碼無效,或未註冊已識別的類別。
type
不是有效的類型。
備註
要叫用的建構函式必須可供存取,而且必須提供最特定的相符專案與指定的自變數清單。
注意
從 .NET Framework 2.0 開始,如果呼叫端已被授與 ReflectionPermissionFlag.RestrictedMemberAccess 旗標 ReflectionPermission,而且包含非公用型別的元件授與集僅限於呼叫端的授與集或子集,這個方法就可以用來存取非公用類型。 (請參閱反映
適用於
CreateInstance(String, String, Object[])
使用具名元件和無參數建構函式,建立指定名稱的類型實例。
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
之型別的元件名稱。 如果 assemblyName
null
,則會搜尋執行中的元件。
- typeName
- String
要建立 實例之型別的完整名稱。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是包含單一 UrlAttribute 對象的陣列,指定啟動遠端物件所需的URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或 Nullable<T> 實例的 null
。
例外狀況
typeName
null
。
找不到相符的公用建構函式。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
activationAttributes
不是空陣列,而且所建立的類型不會衍生自 MarshalByRefObject。
-或-
activationAttributes
不是 UrlAttribute
陣列。
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 開始,如果呼叫端已使用 ReflectionPermissionFlag.RestrictedMemberAccess 旗標授與呼叫者 ReflectionPermission,而且非公用類型的授與集僅限於呼叫端的授與集或子集,則這個方法可以用來建立非公用類型。 (請參閱反映
適用於
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
之型別的元件名稱。 如果 assemblyName
null
,則會搜尋執行中的元件。
- typeName
- String
要建立 實例之型別的完整名稱。
- ignoreCase
- Boolean
true
指定搜尋 typeName
不區分大小寫;false
指定搜尋區分大小寫。
- bindingAttr
- BindingFlags
零個或多個位旗標的組合,會影響搜尋 typeName
建構函式。 如果 bindingAttr
為零,則會對公用建構函式進行區分大小寫的搜尋。
- binder
- Binder
物件,使用 bindingAttr
和 args
來搜尋和識別 typeName
建構函式。 如果 binder
null
,則會使用預設系結器。
- args
- Object[]
以數位、順序和輸入要叫用之建構函式參數的自變數陣列。 如果 args
是空陣列或 null
,則會叫用不採用任何參數的建構函式(無參數建構函式)。
- culture
- CultureInfo
針對 typeName
建構函式所宣告之 args
強制型別的文化特性特定資訊。 如果 culture
null
,則會使用目前線程的 CultureInfo。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是包含單一 UrlAttribute 對象的陣列,指定啟動遠端物件所需的URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
- securityInfo
- Evidence
用來做出安全策略決策並授與程式代碼許可權的資訊。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或針對沒有值的 Nullable<T> 實例 null
。
- 屬性
例外狀況
typeName
null
。
找不到相符的建構函式。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
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 開始,如果呼叫者已使用 ReflectionPermissionFlag.RestrictedMemberAccess 旗標授與呼叫者 ReflectionPermission,以及包含非公用類型和成員的元件授與集,則這個方法可用來建立非公用類型和成員,或授與給呼叫者的授與集或子集。 (請參閱反映
適用於
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
,則會叫用不採用任何參數的建構函式(無參數建構函式)。
傳回
新建立之對象的參考,或 Nullable<T> 實例沒有值的 null
。
例外狀況
type
null
。
type
不可以是 TypeBuilder。
-或-
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
包含 type
的元件是使用 Save建立的動態元件。
-或-
最符合 args
的建構函式具有 varargs
自變數。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
注意:在適用於 Windows 市集應用程式的 .NET 中, 或 可攜式類別庫,請改為攔截基類例外狀況,MemberAccessException。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
注意:在適用於 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 開始,如果呼叫端已被授與 ReflectionPermissionFlag.RestrictedMemberAccess 旗標 ReflectionPermission,而且包含非公用型別的元件授與集僅限於呼叫端的授與集或子集,這個方法就可以用來存取非公用類型。 (請參閱反映
適用於
CreateInstance(Type, Boolean)
使用該類型的無參數建構函式,建立指定類型的實例。
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
。
傳回
新建立之對象的參考,或 Nullable<T> 實例的 null
。
例外狀況
type
null
。
type
不可以是 TypeBuilder。
-或-
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
包含 type
的元件是使用 Save建立的動態元件。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
type
是 COM 物件,但用來取得型別的類別標識碼無效,或未註冊已識別的類別。
type
不是有效的類型。
備註
注意
從 .NET Framework 2.0 開始,如果呼叫者已使用 ReflectionPermissionFlag.RestrictedMemberAccess 旗標授與 ReflectionPermission,以及包含非公用類型和成員的元件授與集限制為呼叫端的授與集或子集,這個方法就可以用來存取非公用類型和成員。 (請參閱反映
適用於
CreateInstance(String, String)
使用具名元件和無參數建構函式,建立指定名稱的類型實例。
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
之型別的元件名稱。 如果 assemblyName
null
,則會搜尋執行中的元件。
- typeName
- String
要建立 實例之型別的完整名稱。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或 Nullable<T> 實例的 null
。
例外狀況
typeName
null
。
找不到相符的公用建構函式。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
呼叫端沒有呼叫這個建構函式的許可權。
您無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
assemblyName
不是有效的元件。
-或-
Common Language Runtime (CLR) 2.0 版或更新版本目前已載入,且已針對比目前載入的版本更新版本的 CLR 編譯 assemblyName
。 請注意,.NET Framework 2.0、3.0 和 3.5 版都使用 CLR 2.0 版。
範例
下列範例會在名為 PersonInfo
的元件中定義名為 Person
的類別。 請注意,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
可以是下列其中一項:
元件的簡單名稱,不含其路徑或擴展名。 例如,您會為路徑和名稱為 的元件指定
TypeExtensions
。\bin\TypeExtensions.dll。已簽署元件的完整名稱,其中包含其簡單名稱、版本、文化特性和公鑰令牌;例如,“TypeExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=181869f2f7435b51”。
如需 Common Language Runtime 如何識別及載入元件的詳細資訊,請參閱 Runtime 如何找出元件。 如需使用應用程式元件位置的詳細資訊,請參閱 指定元件的位置。 如果找到 assemblyName
,則會在預設內容中載入。
注意
從 .NET Framework 2.0 開始,如果呼叫端已被授與 ReflectionPermissionFlag.RestrictedMemberAccess 旗標 ReflectionPermission,而且包含非公用類型的元件授與集僅限於呼叫者的授與集或子集,則這個方法可以用來建立非公用類型。 (請參閱反映
適用於
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 字串陣列。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或 Nullable<T> 實例的 null
。
備註
使用 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
要建立的物件類型。
傳回
新建立之對象的參考,或 Nullable<T> 實例的 null
。
例外狀況
type
null
。
type
不可以是 TypeBuilder。
-或-
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
-或-
包含 type
的元件是使用 Save建立的動態元件。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
注意:在適用於 Windows 市集應用程式的 .NET 中, 或 可攜式類別庫,請改為攔截基類例外狀況,MemberAccessException。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
注意:在適用於 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 開始,如果呼叫端已被授與 ReflectionPermissionFlag.RestrictedMemberAccess 旗標 ReflectionPermission,而且包含非公用型別的元件授與集僅限於呼叫端的授與集或子集,這個方法就可以用來存取非公用類型。 (請參閱反映
適用於
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
指定要建立之物件的啟用內容物件。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或 Nullable<T> 實例的 null
。
備註
使用 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
之型別的元件名稱。 如果 assemblyName
null
,則會搜尋執行中的元件。
- typeName
- String
要建立 實例之型別的完整名稱。
傳回
必須解除包裝的句柄,才能存取新建立的物件,或 Nullable<T> 實例的 null
。
- 屬性
例外狀況
typeName
或 domain
null
。
找不到相符的公用建構函式。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
呼叫端沒有呼叫這個建構函式的許可權。
透過反映叫用的建構函式會擲回例外狀況。
COM 類型不是透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 型別或這些類型的陣列。
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>()
使用無參數建構函式,建立指定泛型型別參數所指定的型別實例。
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
要建立的類型。
傳回
新建立之對象的參考,或 Nullable<T> 實例的 null
。
例外狀況
無法建立抽象類的實例,或針對 T
指定的型別沒有無參數建構函式。
注意:在適用於 Windows 市集應用程式的 .NET 中, 或 可攜式類別庫,請改為攔截基類例外狀況,MissingMemberException。
備註
編譯程式會使用 CreateInstance<T>() 泛型方法來實作型別參數所指定的型別具現化。 例如,在下列泛型方法中,gcnew T()
new T()
的實作會使用 CreateInstance<T>() C++泛型方法。
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 中 New
,C++gcnew
)。 如果編譯時期不知道類型,您可以呼叫非泛型多載 CreateInstance。
沒有採用自變數清單的 CreateInstance<T>() 泛型方法多載,因為 CreateInstance 的非泛型多載已經提供晚期綁定建構函式解析。