浅谈c#中new和override的用法区别
来源:互联网 发布:软件培训基地 编辑:程序博客网 时间:2024/05/15 04:10
http://hi.baidu.com/xiaoxiao_luo/item/a2b86f0ca468e796a3df43fb
首先,我引用《c#程序设计实用教程》中的一句话:"关键字new和override的区别:new修饰的方法表示显式隐藏基类继承的同名方法,不能够用基类的引用访问派生类的new方法;override表示重写基类的虚方法,可以用基类的引用指向派生类的重写方法。"
要理解这句话,你必须知道句子中的几个关键字:1.显式隐藏
2.用基类的引用访问派生类的new方法
3.重写
下面我来一一解释清楚,明白后,new和override的区别也就清楚了。
看两张图片,也许大家就会明白很多。
.....................................................................................................
大家比较一下,应该明白了第一个和第三个关键字的含义了吧
显示隐藏:new后,子类的method1()会同时和父类的method1()同时存在,但当使用子类的时候调用子类的method1()方法,而不会调用父类的method1(),后面我在详细解释一下什么时候调用父类的method1().
重写:override后,子类继承父类的method1(),并完全的改写此方法。
下面在解释一下“.用基类的引用访问派生类的new方法”,
public class animal
{
public virtual void sleep()
{
Console.WriteLine("animal all need sleep");
}
}
public class fish : animal
{
public override void sleep()
{
Console.WriteLine("fish sleeping with eye_open");
}
}
public class dog : animal
{
public override void sleep()
{
Console.WriteLine("dog sleeping with eye_closed");
}
}
那么现在我们可以在mian函数中执行下面的代码
animal fj1=new animal();
animal fj2=new fish();
animal fj3=new dog();
fj1.sleep();
fj2.sleep();
fj3.sleep();
输出:
animal all need sleep
fish sleeping with eye_open
dog sleeping with eye_closed
如果你用new取代override(这时候父类中就去掉关键字virtual),还是上面的代码:
输出结果:
animal all need sleep
animal all need sleep
animal all need sleep
主要是因为“animal fj1=new animal();”中用animal去实例化它的子类对象,在调用方法的时候它会调用父类的method1()方法,而不是调用子类的method1()方法。这也解决了前面的什么时候调用父类的method1()方法的问题。
有什么不对的地方,恳求指点。
- 浅谈c#中new和override的用法区别
- c#中new和override的用法区别
- c#中new和override的区别
- c#中,new 和 override 的区别
- C#中new和override的区别
- c#中new和override的区别
- C#中new和override的区别
- 浅谈C#中new、override、virtual关键字的区别
- C#中new的用法,及与override的区别
- C#中new和override区别
- C#中new和override区别
- C#中new和override区别
- C#中new和override区别
- C#中new和override区别
- C#中new和override区别
- C#中new和override区别
- C#中new和override区别
- 转 c#中new和override的区别
- HTML快速入门6——连接
- jdbc连接sybase时出错
- HTML快速入门7——URL详解、图片使用
- SOA--让业务能够快速地响应或领导变化,即业务敏捷性
- 点石互动--Zac之:Google炸弹又扔向白宫
- 浅谈c#中new和override的用法区别
- VC运用命名管道实现两个进程之间通信的流程
- NET连接不上Oracle数据时的问题。
- 报复性汉语6级试卷 ,我笑抽了!老外瞪眼了!
- c#中结构体和类的比较
- 倒计时
- pb10通过'OLE DB'连接SQL2000
- HTML快速入门8——HTML分隔符,一般语法,PRE标签,特殊字符显示
- C#调用C++库文件