我有,我要重寫基類的方法,以稍微改變方法的返回類型的情況。通過稍微改變我的意思是返回,從本來會由基本類型方法返回的對象繼承的對象......其實,一點代碼將使它更容易些......重載方法來改變返回類型
class Program
{
static void Main(string[] args)
{
var obj = new ParentClass();
Console.WriteLine("Parent says: " + obj.ShowYourHand());
var obj2 = new ChildClass();
Console.WriteLine("Child says: " + obj2.ShowYourHand());
Console.ReadLine();
}
}
public class ParentClass
{
public string ShowYourHand()
{
var obj = GetExternalObject();
return obj.ToString();
}
protected virtual ExternalObject GetExternalObject()
{
return new ExternalObject();
}
}
public class ChildClass : ParentClass
{
protected virtual new ExternalObjectStub GetExternalObject()
{
return new ExternalObjectStub();
}
}
public class ExternalObject
{
public override string ToString()
{
return "ExternalObject";
}
}
public class ExternalObjectStub : ExternalObject
{
public override string ToString()
{
return "ExternalObjectStub";
}
}
的問題,我有是OBJ2的實例不調用它的GetExternalObject()的版本,而是使用它的父的實現。
我認爲這是因爲在obj的類型預計ExternalObject在父類中的代碼
var obj = GetExternalObject();
這樣做。但我明白,C#不能區分基於返回類型的方法。
我知道還有其他問題的解決方案,例如定義IExternalObject,所以請不要太擔心這個問題。我想知道的是,這種想法是什麼阻止了子類GetExternalObject被子類本身調用?
還是我做一些愚蠢的完全? :-)
類似的問題:[C#:重寫返回類型](http://stackoverflow.com/questions/1048884/c-overriding-return-types) –
的[C#:重寫返回類型]可能的複製(HTTPS ://stackoverflow.com/questions/1048884/c-overriding-return-types) –