簡體   English   中英

如何在程序中使用.NET類型字符串?

[英]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 CreateInstanceCreateInstanceFrom方法,這些方法具有覆蓋,允許您從您使用的任何配置或Type的實例中傳遞讀取的確切字符串,也可以從同一個字符串創建。

當然,還有另一方面,您的可擴展性點的任何實現都需要寫出完整的類型名稱。 為此,您可以使用typeof(MyType).FullNamemyInstance.GetType().FullName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM