[英]Cast derived class type dynamically to base class type C#
public DerivedClass : BaseClass
{
// code
}
DerivedClass B = (DerivedClass)MethodReturnsBaseClassObject();
B.DoWork();
從BaseClass
繼承了許多Derived類。 因此,每次我需要編寫一種使用某些屬性的新方法。
是否有可能使用反射使DerivedClass
類型成為動態類型,並執行類似的操作並使它通用。
System.Type type = GetRequestFromSession().GetType();
type B = (type )MethodReturnsBaseClassObject();
Console.WriteLine( B.Name);
Console.WriteLine( B.Age);
任何幫助表示贊賞。
如果您使用具有以下簽名的通用方法,則可以在強制基類約束的同時安全地訪問派生類型的成員(不強制轉換):
public TDerived MethodReturnsDerivedObject<TDerived>()
where TDerived : BaseClass
您的通話將如下所示:
DerivedClass b = MethodReturnsDerivedObject<DerviedClass>();
b.ExecuteSomeMethodDefinedInBaseClass();
Console.WriteLine(b.SomePropertyDefinedInDerivedClass);
對我來說,這感覺像是糟糕的設計:您將某些通用的東西用作沒有的通用東西。 也許您應該重新考慮您的設計。
對於您的問題,也許您可以創建一個返回所需類型的代理方法或類。 這僅在您調用的方法數量較少時才有用。
另一種選擇是使用dynamic
關鍵字,但是我建議僅在沒有其他效果的情況下使用它。
我現在會同意Kirill Shlenskiy的回答。 但是我也建議如果可行的話,將此方法移至基類本身。 可能存在纏結的依存關系或其他怪異現象阻止了此解決方案,但它也可能使您可以擁有一個使用者而不使用泛型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.