我不確定我是否理解這個問題,但如果我明白了這個問題,但您想知道爲什麼類型Form的實例不像類型ExtendedForm的實例那樣工作。
覆蓋僅替換「子」類型的對象上的方法,而不是「父母」上的方法。首先,這不是繼承應該如何工作,但它也不是實際可行的,即如果你有兩個擴展類,應該使用哪個ToString重寫?
下面應解釋它是如何工作的。
public class ClassBase
{
public override string ToString()
{
return "base";
}
}
public class ClassA : ClassBase
{
public override string ToString()
{
return "A";
}
}
public class ClassB : ClassBase
{
public override string ToString()
{
return "B";
}
}
public class ClassC : ClassA
{
// No override
}
這將產生以下
ClassBase baseClass = new ClassBase();
baseClass.ToString() // Returns "base"
ClassA aClass = new ClassA();
aClass.ToString(); // Returns "A"
ClassB bClass = new ClassB();
bClass.ToString(); // returns "B"
ClassC cClass = new ClassC();
cClass.ToString(); // returns "A" because no override exists
請記住,這不要緊,你有什麼樣的參考。假設你有一個ClassBase,這實際上是引用ClassA的引用,那麼ClassA的覆蓋仍然會被稱爲
ClassBase baseClass = new ClassA();
baseClass.ToString(); // Returns "A" because baseClass is actually a ClassA
你可以發佈你的'ToString'方法和你如何使用它 – ChrisF
而不是描述你的代碼,發佈你的代碼。知道它真的是什麼 –
你使用一些依賴注入框架的形式? – svick