簡體   English   中英

動態將派生類類型轉換為基類C#

[英]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.

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