[英]How do I use .NET type strings in my programs?
例如,在.NET app.config中,您可能會得到
<configuration>
<configSections>
<section name="MyConfig" type="MyAssembly.MyType, MyAssembly, PublicKeyToken=null" />
</configSections>
...
</configuration>
類型部分中的簽名似乎在各種.NET位置標准化,但我不知道如何在我自己的程序中執行此操作。 我在我的程序中使用過System.Activator
,但感覺就像是在重復.NET已經完成的工作。
在編程方面,我該怎么做:
void Main()
{
object instance = CreateInstance("MyAssembly.MyType, MyAssembly, PublicKeyToken=null");
Console.WriteLine(instance.GetType().Name);
}
object CreateInstance(string dotNetTypeSignature)
{
// Code goes here.
}
您可以調用Type.GetType
方法來獲取具有給定(程序集限定)名稱的Type
對象。
您可以調用Activator.CreateInstance
方法來創建類型的實例。 (假設該類型具有公共默認構造函數,或者您知道它采用的構造函數參數)。
例如:
Activator.CreateInstance(Type.GetType(name));
通常使用visual studio設置設計器創建/訪問這些部分。
在解決方案資源管理器中,在Properties-> Settings.settings下查看,或者右鍵單擊項目名稱 - > Properties-> Settings。
完整類型名稱通常用於對特定類型進行“延遲”綁定。 在配置文件示例中,實際的配置節類型在CLR構建時是未知的,因此ConfigurationManager
必須從配置文件中讀取實際類型並在運行時對其進行實例化。 如前所述,這是使用System.Activator
類完成的,它是跨.Net世界的標准方法。
當然,如果要在構建時知道要創建實例的類型,則應該只引用包含它的程序集並使用new
。 但是,如果要實現像ConfigurationManager
這樣的運行時可擴展性,則應使用Activator
CreateInstance
或CreateInstanceFrom
方法,這些方法具有覆蓋,允許您從您使用的任何配置或Type
的實例中傳遞讀取的確切字符串,也可以從同一個字符串創建。
當然,還有另一方面,您的可擴展性點的任何實現都需要寫出完整的類型名稱。 為此,您可以使用typeof(MyType).FullName
或myInstance.GetType().FullName
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.