I am not sure if I understand the question, but if I got it right, you are wondering why instances of type Form does not behave like instances of type ExtendedForm.
Overrides only replace the methods on objects that are of 'child' types, not the methods on the 'parents'. First of all, it's not how inheritance is supposed to work, but it's also not practically possible, i.e. what if you have two extended classes; which ToString override should be used?
The following should explain how it works.
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 }
This would produce the following
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
Keep in mind that it does not matter what kind of reference you have. Say you have a reference to a ClassBase, which is actually referencing a ClassA, then the ClassA override would still be called
ClassBase baseClass = new ClassA(); baseClass.ToString(); // Returns "A" because baseClass is actually a ClassA
ToStringmethod and how you are using it.