| using System;
class A {
public void M( ){Console.WriteLine("M in A");}
public virtual void N( ){Console.WriteLine("N in A");}
public virtual void O( ){Console.WriteLine("O in A");}
public void P( ){Console.WriteLine("P in A");}
}
class B: A{
public void M( ){Console.WriteLine("M in B");} // warning
public override void N( ){Console.WriteLine("N in B");}
public void O( ){Console.WriteLine("O in B");} // warning
public new void P( ){Console.WriteLine("P in B");}
}
class Client {
public static void Main(){
A aa = new A( ), // aa has static type A, and dynamic type A
ab = new B( ); // ab has static type A, and dynamic type B
B b = new B( ); // b has static type B, and dynamic type B
aa.N( ); ab.N( ); b.N( ); // The dynamic type controls
Console.WriteLine( );
aa.P( ); ab.P( ); b.P( ); // The static type controls
}
} |