using System; using System.Collections;
public class Nevermore60Customer:Customer { public override string GetFunnyString() { return "Nevermore60.Nevenmore!"; }
public class Customer { public virtual string GetFunnyString() { return "Plain ordinary customer.Kaark!"; } public class SamplesArray { public static void Main() { Customer Cust1=new Nevermore60Customer(); Nevermore60Customer Cust2; // Cust1=new Customer(); Console.WriteLine("Customer referencing Customer."+Cust1.GetFunnyString()); Cust1=new Nevermore60Customer(); Console.WriteLine("Customer referencing Nevenmore60Customer:"+Cust1.GetFunnyString()); Cust2=new Nevermore60Customer(); Console.WriteLine("Nevenmore60Customer referencing"+Cust2.GetFunnyString());
} }
Customer Cust1=new Nevermore60Customer(); 如果是重写:则,如果声明的基类对象,指向的是派生类,那么这时调用的是派生类中对基本重写的方法的方法(如上所示) 如果是隐藏基类方法: public New string GetFunnyString() { return "Nevermore60.Nevenmore!"; } 则:Customer Cust1=new Nevermore60Customer();此时Cust1调用的仍是声明时候的基类中的GetFunnyString方法. 但二者声明与赋值都是同一个类时,不会发生这种问题. 
|