第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用反射動態(tài)創(chuàng)建通用C對象?

如何使用反射動態(tài)創(chuàng)建通用C對象?

慕俠2389804 2019-07-11 20:40:32
如何使用反射動態(tài)創(chuàng)建通用C對象?在C#中,我有以下對象:public class Item{ }public class Task<T>{ }public class TaskA<T> : Task<T>{ }public class TaskB<T> : Task<T>{ }我希望使用C#反射動態(tài)地創(chuàng)建TASCA或TaskB(Activator.CreateInstance)。但是,我不知道手之前的類型,所以我需要基于字符串(如“Nampace.askA”或“Nampacet.askAB”)動態(tài)創(chuàng)建TASKA。
查看完整描述

3 回答

?
慕容708150

TA貢獻1831條經(jīng)驗 獲得超4個贊

實際上,您將無法寫出最后一行。

但是您可能不想創(chuàng)建對象,只是為了或為了創(chuàng)建它。您可能希望對新創(chuàng)建的實例調(diào)用一些方法。

然后,您將需要類似于接口的內(nèi)容:

public interface ITask {
    void Process(object o);}public class Task<T> : ITask{ 
   void ITask.Process(object o) 
   {
      if(o is T) // Just to be sure, and maybe throw an exception
        Process(o as T);
   }

   public void Process(T o) { }}

并以:

Type d1 = Type.GetType("TaskA"); //or "TaskB"Type[] typeArgs = { typeof(Item) };
Type makeme = d1.MakeGenericType(typeArgs);ITask task = Activator.CreateInstance(makeme) as ITask;
// This can be Item, or any type derived from Itemtask.Process(new Item());

在任何情況下,你都不會被靜態(tài)地投到你事先不知道的類型中(在這個例子中是“makame”)。ITASK允許你進入你的目標類型。

如果這不是你想要的,你可能需要在你想要達到的目標上更具體一點。


查看完整回答
反對 回復 2019-07-11
?
aluckdog

TA貢獻1847條經(jīng)驗 獲得超7個贊

請確保您這樣做是有充分理由的,下面這樣的簡單函數(shù)將允許靜態(tài)類型,并允許IDE執(zhí)行諸如“查找引用”和“重構(gòu)->重命名”之類的操作。

public Task <T> factory (String name){
  Task <T> result;

  if (name.CompareTo ("A") == 0)
  {
    result = new TaskA ();
  }
  else if (name.CompareTo ("B") == 0)
  {
    result = new TaskB ();
  }

  return result;}


查看完整回答
反對 回復 2019-07-11
  • 3 回答
  • 0 關(guān)注
  • 566 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號