本帖最后由 fcyan86 于 2013-6-5 16:09 编辑
代码:- class Program
- {
- static void Main(string[] args)
- {
- B b=new B();
- b.M();
- C c=new C();
- c.M();
- A a;
- a = b;
- a.M();
- a = c;
- a.M();
- /*
- * 输出结果如下:
- * New B.M
- * override C.M
- * A.M
- * override C.M
- */
- }
- }
- class A
- {
- public virtual void M()
- {
- Console.WriteLine("A.M");
- }
- }
- class B:A
- {
- public new void M()
- {
- Console.WriteLine("New B.M");
- }
- }
- class C:A
- {
- public override void M()
- {
- Console.WriteLine("override C.M");
- }
- }
复制代码 那么问题是:使用override重写时,是将父类中的虚方法重写了。当使用new将父类的方法隐藏,那么当如上面代码所示,当进行:a=b;运算时是不是隐含的类型转换将B类转换为A类时,同时会将B类中new出的M方法丢失,还是根new父类的方法一样,将子类中的该方法隐藏。
|