C#中多态override 和new的区别_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#中多态override 和new的区别

C#中多态override 和new的区别

 2013/8/20 12:44:26  蒋叶湖  博客园  我要评论(0)
  • 摘要:C#中,派生类可以包含与基类方法同名的方法。基类方法必须定义为virtual。如果派生类中的方法前面没有new或override关键字,则编译器将发出警告,该方法将有如存在new关键字一样执行操作。如果派生类中的方法前面带有new关键字,则该方法被定义为独立于基类中的方法。如果派生类中的方法前面带有override关键字,则派生类的对象将调用该方法,而不是调用基类方法。可以从派生类中使用base关键字调用基类方法。override、virtual和new关键字还可以用于属性、索引器和事件中
  • 标签:C# ide 区别
 

C# 中,派生类可以包含与基类方法同名的方法。

  • 基类方法必须定义为 virtual。

  • 如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 class="keyword">new 关键字一样执行操作。

  • 如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。

  • 如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。

  • 可以从派生类中使用 base 关键字调用基类方法。

  • overridevirtualnew 关键字还可以用于属性、索引器和事件中。

默认情况下,C# 方法为非虚方法

 

举个简单列子来看看吧

 

 public class A
    {
        public virtual void Out()
        {
            Console.WriteLine("come from parent");
        }
    }

    public class B : A
    {
        public override void Out()//注意这个地方的override
        {
            Console.WriteLine("come from child");
        }
    }

//使用的时候

A a = (b)new A();//或者A a = new B();

a.Out();//这个时候会输出come from child

如果把B类的override变成new

public class B : A
    {
        public new void Out()//注意这个地方的new,因为使用了new就相当于子类B定义了仅仅们名字和A相同的方法,但是他们之间没有任何关系。所以A调用Oout的时候还是A类自己的Out方法
        {
            Console.WriteLine("come from child");
        }
    }

A a = (b)new A();

a.Out();//这个时候会输出come from parent;

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

发表评论
用户名: 匿名