我不确定我是否理解这个问题,但如果我明白了这个问题,但您想知道为什么类型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