It should not ...
A a = d;
This means that you are creating a class of type A And since you explicitly override the associated method in class B ; A uses a method in class B
On the other hand, in this line
new public virtual void F() { Console.WriteLine("CF"); }
You declare that you will not use the F() method from the database using the new keyword.
If you redefined the F() method in classes D and C , all instances would call the F() method declared in class D
daryal
source share