我有一個BaseClass如下
public class BaseClass
{
public string A { get; set;}
public string B { get; set;}
}
另一個類派生自BaseClass如下
public class DerivedClass : BaseClass
{
public string C { get; set;}
}
我有一個通用方法,它可以回傳任何繼承的派生類BaseClass。
public T MyMethod(bool returnBase) where T : BaseClass
{
if(!returnBase)
{
T result = JsonConvert.DeserializeObject<T>(someString);
return T;
}
else
{
BaseClass bc = new BaseClass
{
A = "some string",
B = "some other string"
};
return (T)bc;
}
}
在這段代碼中,什么時候returnBase為 FALSE 一切正常,但是當它設定為 TRUE 時,我想回傳BaseClass,但由于我DerivedClass在呼叫代碼中將回傳型別 (T) 定義為,我得到了例外。
我怎樣才能讓這段代碼運行?
uj5u.com熱心網友回復:
只需將方法回傳型別設定為 BaseClass 并在回傳基時避免 (T) 強制轉換
public BaseClass MyMethod(bool returnBase) where T : BaseClass
{
if(!returnBase)
{
T result = JsonConvert.DeserializeObject<T>(someString);
return T;
}
else
{
BaseClass bc = new BaseClass
{
A = "some string",
B = "some other string"
};
return bc;
}
}
uj5u.com熱心網友回復:
(T)bc由于您無法將父級強制轉換為子級,因此在強制轉換中繼承將是一個錯誤。這相當于說all Animals are Dogs雖然還有其他動物(例如貓),但絕對不是狗。
為了讓它運行,我建議else通過以下方式實作:
T defaultObj = new T
{
A = "some string",
B = "some other string"
}
return defaultObj;
由于T是 的子級BaseClass,它應該具有基類的所有屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459962.html
上一篇:從超類指標向量呼叫重寫的方法
