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 https://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 https://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 https://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
規範為建構者宣告args的形式類型所強制的文化特定資訊typeName。 若 culture ,nullCultureInfo則使用 當前執行緒。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是包含單一 UrlAttribute 物件的陣列。 該 UrlAttribute 定義啟動遠端物件所需的 URL。
- securityAttributes
- Evidence
用來做出安全策略決策並授與程式代碼許可權的資訊。
傳回
一個必須展開包裝才能存取新建立物件的句柄,或 null 是對於 Nullable<T> 沒有值的實例。
- 屬性
例外狀況
domain 或 typeName 為 null。
找不到相符的建構函式。
typeName 未在 assemblyName中發現。
assemblyName 未被找到。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
activationAttributes 不是空陣列,且所建立的型別並非源自 MarshalByRefObject。
-或-
最匹配 args 的構造子有 varargs 論點。
assemblyName 不是一個有效的組裝。
-或-
目前載入的是通用語言執行時(CLR)2.0 或更新版本,且 assemblyName 編譯為比目前載入版本更新的 CLR 版本。 請注意,.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
規範為建構者宣告args的形式類型所強制的文化特定資訊typeName。 若 culture ,nullCultureInfo則使用 當前執行緒。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是一個陣列,包含 UrlAttribute 一個物件,指定啟動遠端物件所需的 URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
傳回
一個必須展開包裝才能存取新建立物件的句柄,或 null 是對於 Nullable<T> 沒有值的實例。
- 屬性
例外狀況
domain 或 typeName 為 null。
找不到相符的建構函式。
typeName 未在 assemblyName中發現。
assemblyName 未被找到。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
activationAttributes 不是空陣列,且所建立的型別並非源自 MarshalByRefObject。
-或-
最匹配 args 的構造子有 varargs 論點。
assemblyName 不是一個有效的組裝。
-或-
目前載入的是通用語言執行時(CLR)2.0 或更新版本,且 assemblyName 編譯為比目前載入版本更新的 CLR 版本。 請注意,.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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
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);
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.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
static member CreateInstance : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
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
規範為建構者宣告args的形式類型所強制的文化特定資訊typeName。 若 culture ,nullCultureInfo則使用 當前執行緒。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是一個陣列,包含 UrlAttribute 一個物件,指定啟動遠端物件所需的 URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
傳回
一個必須展開包裝才能存取新建立的實例,或 null 是對無值實例的 Nullable<T> 句柄。
- 屬性
例外狀況
typeName 為 null。
找不到相符的建構函式。
typeName 未在 assemblyName中發現。
assemblyName 未被找到。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
activationAttributes 不是空陣列,且所建立的型別並非源自 MarshalByRefObject。
-或-
最匹配 args 的構造子有 varargs 論點。
assemblyName 不是一個有效的組裝。
-或-
目前載入的是通用語言執行時(CLR)2.0 或更新版本,且 assemblyName 編譯為比目前載入版本更新的 CLR 版本。 請注意,.NET Framework 2.0、3.0 和 3.5 版都使用 CLR 2.0 版。
備註
用來 ObjectHandle.Unwrap 展開返回值。
在 .NET Core 3.0 及更新版本中,由此 API 觸發的組合語言載入會受到當前值 AssemblyLoadContext.CurrentContextualReflectionContext的影響。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型與成員的授權集限制於呼叫者的授權集或其子集,此方法可用於建立非公開類型與成員。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
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
規範為建構者宣告args的形式類型所強制的文化特定資訊type。 若 culture ,nullCultureInfo則使用 當前執行緒。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是一個陣列,包含 UrlAttribute 一個物件,指定啟動遠端物件所需的 URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
傳回
指的是新建立的物件,或 null 是對 Nullable<T> 無值的實例。
例外狀況
type 為 null。
type 不可能是 TypeBuilder。
-或-
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
activationAttributes 不是空陣列,且所建立的型別並非源自 MarshalByRefObject。
-或-
包含 type 的組裝是一個動態組裝,且是用 Save所建立的。
-或-
最匹配 args 的構造子有 varargs 論點。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的建構函式。
type 是 COM 物件,但用於取得型別的類別識別碼無效,或是已識別的類別未被註冊。
type 不是一個有效的類型。
備註
要叫用的建構函式必須根據所指定系結器和系結屬性的條件約束,提供最特定的比對與指定的自變數清單。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且非公開類型與成員的授權集合限制於呼叫者的授權集或其子集,此方法可用於存取非公開類型與成員。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo)
- 來源:
- Activator.cs
- 來源:
- Activator.cs
- 來源:
- 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
規範為建構者宣告args的形式類型所強制的文化特定資訊type。 若 culture ,nullCultureInfo則使用 當前執行緒。
傳回
指的是新建立的物件,或 null 是對 Nullable<T> 無值的實例。
例外狀況
type 為 null。
type 不可能是 TypeBuilder。
-或-
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
包含 type 的組裝是一個動態組裝,且是用 Save所建立的。
-或-
最匹配 args 的構造子有 varargs 論點。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的建構函式。
type 是 COM 物件,但用於取得型別的類別識別碼無效,或是已識別的類別未被註冊。
type 不是一個有效的類型。
備註
要叫用的建構函式必須根據所指定系結器和系結屬性的條件約束,提供最特定的比對與指定的自變數清單。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型與成員的授權集限制於呼叫者的授權集或其子集,此方法可用於存取非公開類型與成員。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
CreateInstance(Type, Object[], Object[])
- 來源:
- Activator.cs
- 來源:
- Activator.cs
- 來源:
- 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> 無值的實例。
例外狀況
type 為 null。
type 不可能是 TypeBuilder。
-或-
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
activationAttributes 不是空陣列,且所建立的型別並非源自 MarshalByRefObject。
-或-
包含 type 的組裝是一個動態組裝,且是用 Save所建立的。
-或-
最匹配 args 的構造子有 varargs 論點。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
type 是 COM 物件,但用於取得型別的類別識別碼無效,或是已識別的類別未被註冊。
type 不是一個有效的類型。
備註
要叫用的建構函式必須可供存取,而且必須提供最特定的相符專案與指定的自變數清單。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型的授權集限制於呼叫者的授權集或其子集,此方法可用於存取非公開型別。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
CreateInstance(String, String, Object[])
使用具名元件和無參數建構函式,建立指定名稱的類型實例。
public:
static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
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);
public static System.Runtime.Remoting.ObjectHandle CreateInstance(string assemblyName, string typeName, object[] activationAttributes);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
static member CreateInstance : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
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。
傳回
一個必須展開包裝才能存取新建立物件或nullNullable<T>實例的句柄。
- 屬性
例外狀況
typeName 為 null。
找不到相符的公用建構函式。
typeName 未在 assemblyName中發現。
assemblyName 未被找到。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
activationAttributes 不是空陣列,且所建立的型別並非源自 MarshalByRefObject。
-或-
activationAttributes 不是 UrlAttribute
陣列。
assemblyName 不是一個有效的組裝。
-或-
目前載入的是通用語言執行時(CLR)2.0 或更新版本,且 assemblyName 編譯為比目前載入版本更新的 CLR 版本。 請注意,.NET Framework 2.0、3.0 和 3.5 版都使用 CLR 2.0 版。
備註
用來 ObjectHandle.Unwrap 展開返回值。
在 .NET Core 3.0 及更新版本中,由此 API 觸發的組合語言載入會受到當前值 AssemblyLoadContext.CurrentContextualReflectionContext的影響。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且非公開類型的授權集限制於呼叫者的授權集或其子集,此方法可用於建立非公開類型。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
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 https://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 https://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 https://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
規範為建構者宣告args的形式類型所強制的文化特定資訊typeName。 若 culture ,nullCultureInfo則使用 當前執行緒。
- activationAttributes
- Object[]
一或多個可以參與啟用的屬性陣列。 這通常是一個陣列,包含 UrlAttribute 一個物件,指定啟動遠端物件所需的 URL。
此參數與客戶端啟動的物件相關。 用戶端啟用是保留的舊版技術,可保持回溯相容性,但不建議用於新的開發。 分散式應用程式應該改用 Windows Communication Foundation。
- securityInfo
- Evidence
用來做出安全策略決策並授與程式代碼許可權的資訊。
傳回
一個必須展開包裝才能存取新建立物件的句柄,或 null 是對於 Nullable<T> 沒有值的實例。
- 屬性
例外狀況
typeName 為 null。
找不到相符的建構函式。
typeName 未在 assemblyName中發現。
assemblyName 未被找到。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
activationAttributes 不是空陣列,且所建立的型別並非源自 MarshalByRefObject。
-或-
最匹配 args 的構造子有 varargs 論點。
assemblyName 不是一個有效的組裝。
-或-
目前載入的是通用語言執行時(CLR)2.0 或更新版本,且 assemblyName 編譯為比目前載入版本更新的 CLR 版本。 請注意,.NET Framework 2.0、3.0 和 3.5 版都使用 CLR 2.0 版。
備註
用來 ObjectHandle.Unwrap 展開返回值。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型與成員的授權集限制於呼叫者的授權集或其子集,此方法可用於建立非公開類型與成員。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
CreateInstance(Type, Object[])
- 來源:
- Activator.cs
- 來源:
- Activator.cs
- 來源:
- 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> 無值的實例。
例外狀況
type 為 null。
type 不可能是 TypeBuilder。
-或-
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
包含 type 的組裝是一個動態組裝,且是用 Save所建立的。
-或-
最匹配 args 的構造子有 varargs 論點。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
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
備註
要叫用的建構函式必須可供存取,而且必須提供最特定的相符專案與指定的自變數清單。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型的授權集限制於呼叫者的授權集或其子集,此方法可用於存取非公開型別。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
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 如果只有一個公開的無參數建構器能夠匹配。
傳回
指的是新建立的物件,或 null 是實 Nullable<T> 例。
例外狀況
type 為 null。
type 不可能是 TypeBuilder。
-或-
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
包含 type 的組裝是一個動態組裝,且是用 Save所建立的。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
type 是 COM 物件,但用於取得型別的類別識別碼無效,或是已識別的類別未被註冊。
type 不是一個有效的類型。
備註
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型與成員的授權集限制於呼叫者的授權集或其子集,此方法可用於存取非公開類型與成員。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
CreateInstance(String, String)
使用具名元件和無參數建構函式,建立指定名稱的類型實例。
public:
static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")]
public static System.Runtime.Remoting.ObjectHandle? CreateInstance(string assemblyName, string typeName);
public static System.Runtime.Remoting.ObjectHandle? CreateInstance(string assemblyName, string typeName);
public static System.Runtime.Remoting.ObjectHandle CreateInstance(string assemblyName, string typeName);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Type and its constructor could be removed")>]
static member CreateInstance : string * string -> System.Runtime.Remoting.ObjectHandle
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
要建立 實例之型別的完整名稱。
傳回
一個必須展開包裝才能存取新建立物件或nullNullable<T>實例的句柄。
- 屬性
例外狀況
typeName 為 null。
找不到相符的公用建構函式。
typeName 未在 assemblyName中發現。
assemblyName 未被找到。
呼叫端沒有呼叫這個建構函式的許可權。
您無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
透過反映叫用的建構函式會擲回例外狀況。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
assemblyName 不是一個有效的組裝。
-或-
目前載入的是通用語言執行時(CLR)2.0 或更新版本,且 assemblyName 編譯為比目前載入版本更新的 CLR 版本。 請注意,.NET Framework 2.0、3.0 和 3.5 版都使用 CLR 2.0 版。
範例
以下範例定義了一個名為 Person 的類別,置於名為 PersonInfo的 assembly 中。 請注意,該 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反射方法,為物件Name屬性指派值Person並顯示其值。
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”。
欲了解更多關於通用語言執行環境如何識別及載入組件語言的資訊,請參閱 「執行時如何定位組件」一文。 關於如何使用應用程式設定檔來定義組裝裝置位置的資訊,請參閱 「指定組裝裝置的位置」。 如果 assemblyName 找到 ,則會在預設上下文中載入。
在 .NET Core 3.0 及更新版本中,由此 API 觸發的組合語言載入會受到當前值 AssemblyLoadContext.CurrentContextualReflectionContext的影響。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型的授權集限制於呼叫者的授權集或其子集,此方法可用於建立非公開型別。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
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 字串陣列。
傳回
一個必須展開包裝才能存取新建立物件或nullNullable<T>實例的句柄。
備註
使用該 ObjectHandle.Unwrap 方法展開返回值。
啟用內容會在指令清單型啟用期間用來設定網域原則,並提供以應用程式為基礎的安全性模型。 該 ActivationContext 類別包含一個 ApplicationIdentity 物件,提供對應用程式清單的存取。 如需詳細資訊,請參閱 ApplicationSecurityManager 類別。
另請參閱
適用於
CreateInstance(Type)
- 來源:
- Activator.cs
- 來源:
- Activator.cs
- 來源:
- 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> 例。
例外狀況
type 為 null。
type 不可能是 TypeBuilder。
-或-
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
-或-
包含 type 的組裝是一個動態組裝,且是用 Save所建立的。
所呼叫的建構函式會擲回例外狀況。
呼叫端沒有呼叫這個建構函式的許可權。
無法建立抽象類的實例,或使用晚期綁定機制叫用這個成員。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
找不到相符的公用建構函式。
type 是 COM 物件,但用於取得型別的類別識別碼無效,或是已識別的類別未被註冊。
type 不是一個有效的類型。
範例
以下程式碼範例示範如何呼叫此 CreateInstance(Type) 方法。 會建立數個不同類型的實例,並顯示其預設值。
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
備註
要叫用的建構函式必須可供存取。
注意
若呼叫者已獲得ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess該旗標,且包含非公開類型的授權集限制於呼叫者的授權集或其子集,此方法可用於存取非公開型別。 (參見 安全考量 以促進反思)要使用此功能,您的應用程式應針對 .NET Framework 3.5 或更新版本。
適用於
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
指定要建立之物件的啟用內容物件。
傳回
一個必須展開包裝才能存取新建立物件或nullNullable<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 的組件名稱。 若 assemblyName 是 null,則搜尋執行中的組裝體。
- typeName
- String
要建立 實例之型別的完整名稱。
傳回
一個必須展開包裝才能存取新建立物件或nullNullable<T>實例的句柄。
- 屬性
例外狀況
typeName 或 domain 為 null。
找不到相符的公用建構函式。
typeName 未在 assemblyName中發現。
assemblyName 未被找到。
呼叫端沒有呼叫這個建構函式的許可權。
透過反映叫用的建構函式會擲回例外狀況。
COM型並非透過 GetTypeFromProgID 或 GetTypeFromCLSID取得。
不支援建立 TypedReference、 ArgIterator、 Void及 RuntimeArgumentHandle 型別,或這些型別的陣列。
assemblyName 不是一個有效的組裝。
-或-
目前載入的是通用語言執行時(CLR)2.0 或更新版本,且 assemblyName 編譯為比目前載入版本更新的 CLR 版本。 請注意,.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>();
public static T CreateInstance<T>() where T : allows ref struct;
static member CreateInstance : unit -> 'T
Public Shared Function CreateInstance(Of T) () As T
類型參數
- T
要建立的類型。
傳回
指的是新建立的物件,或 null 是實 Nullable<T> 例。
例外狀況
無法建立抽象類別的實例,或指定的類型 T 沒有無參數建構子。
備註
CreateInstance<T>()編譯器使用通用方法實作由型別參數指定的型別實例化。 例如,在以下通用方法中,的 new T() 實作使用 CreateInstance<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>() 通用方法,因為該型別必須在編譯時已知。 若在編譯時已知型別,則可使用一般實例語法(new C# 中的 運算子, New Visual Basic 中的 操作符)。 如果在編譯時尚未知道該型別,你可以呼叫一個 CreateInstance非泛型的超載。
不存在接受參數列表的 CreateInstance<T>() 泛型方法的超載,因為非 CreateInstance 泛型的超載已經提供了晚界建構子解析。