如下:
public class ParentClass
{
}
public class ChildAClass:ParentClass
{
}
public class ChildBClass:ParentClass
{
}
public T GetChild(ParentClass pc,string classType)
{
//求高手指點這里面怎么寫,能回傳泛型
}
形參為父類和子類的型別,輸出引數為子類的泛型;形參pc中保證可以轉換為子類
uj5u.com熱心網友回復:
你這個寫法不叫泛型吧。泛型的特征是:在運行時指定型別。你只有一個回傳值是T,這就沒有“指定型別”啊。你整體框架寫的有問題,不只是填空的那段代碼怎么寫的,要改框架代碼。uj5u.com熱心網友回復:
我猜測你是想通過classType來獲取子類的型別(Type)?因為如果只是型別轉換,就根本不需要這樣寫了,直接 (pc as T)不需要范型,不需要傳父類物件
public static Type GetChild(string classType)
=> Assembly
.GetExecutingAssembly()
.GetTypes()
.Where(t => typeof(ParentClass).IsAssignableFrom(t) && t.Name == classType)
.FirstOrDefault();
uj5u.com熱心網友回復:
既然要轉換,那就要限定T的范圍,泛型繼承。public class ParentClass
{
}
public class ChildAClass : ParentClass
{
}
public class ChildBClass : ParentClass
{
}
public class ClassTest<T> where T : ParentClass
{
public T GetChild(ParentClass pc, string classType)
{
return (T)pc;
}
}
uj5u.com熱心網友回復:
您好,感謝您的幫忙,我想要回傳的不是Type,而是具體某個子類的型別,比如說,ChildAClass;形參是父類,和具體的子類的型別或者型別的字串;uj5u.com熱心網友回復:
您好,感謝您的回復,您可能沒有明白我的意思uj5u.com熱心網友回復:
您好,您可能沒有明白我的意思,如果需要改框架的我就不會來發起問題了uj5u.com熱心網友回復:
不是我們有問題,是你有問題啊。首先你要承認自己提出了錯誤的問題1、首先你這個問題,跟泛型毫無關系,你說泛型的事兒,說明你沒搞懂泛型。
2、根據fun(父型別別,子型別別字串),根本不可能得到子類的型別,這是在數學上的不可能,這說明你對于父子型別別的思路是混亂的。
舉個例子,假設你還沒有老婆,還沒有兒子。但你暢想了一下,然后先給你兒子取了個名字,叫“王小五”,然后你要求解:
var 王小五的型別 = fun(typeof(你),"王小五")。
怎么可能得到王小五的型別?王小五還不存在這個世界上。
要得到一個類的型別,只有根據它的二進制代碼的位置才能獲得,比如是:
var 王小五的型別 = Type.GetType("你未來老婆.的子宮.里的受精卵");,這壓根不需要“你”的型別作為傳輸傳入,也用不著。
最后,給你貼一段代碼,看c#如何獲得型別
var type = Type.GetType("Kernel.SimpleLibrary.PlugPut,Kernel.SimpleLibrary");
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/29651.html
標籤:C#
上一篇:visual studio 2019 水晶報表 A data source instance has not been supplied for the
