没有合适的资源?快使用搜索试试~ 我知道了~
首页new、abstract、virtual、override,sealed关键字区别和使用代码示例
new、abstract、virtual、override,sealed关键字区别和使用代码示例
需积分: 50 726 浏览量
更新于2023-05-27
评论
收藏 64KB DOC 举报
new、abstract、virtual、override,sealed关键字区别和使用代码示例
资源详情
资源评论
资源推荐

new 与 override 的区别
引用 AnyTao 博客中的一句话:
覆写(override)与重载(overload),是成就 .NET 面向对
象多态特性的基本技术之一
正如某网友说的那一句话:
Override 覆写 就是把原来的换掉了
new 新的 就是两个共存着
使用 override 重写 xx 方法,通过父类引用一样只能看到重写后的
方法;
如果使用 new 隐藏 xx 方法,父类子类引用各自对应方法;
override 重写虚方法,那么就只剩下重写以后的方法;
new 隐藏基类的方法,那么基类的方法和当前类的方法同时存在只
是被隐藏了;
使用 override 修饰符主要用来修改方法、属性、索引器或事件。
重写基方法必须与重写方法具有相同的名称。
不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽
象的或重写的。
重写声明不能更改虚方法的可访问性。重写方法和虚方法必须
具有相同的访问级修饰符。例如:虚方法为 public 的,重新方法

也必须是 public 的。
不能使用下列修饰符修改重写方法:
new static virtual abstract
重写属性声明必须指写与继承属性完全相同的访问修饰符、类
型和名称,并且重写属性必须是虚拟的、抽象的或是重写的。
要求:(三相同)
1、方法名称相同
2、参数列表相同
3、返回值类型相同
一句话,只需要重新写方法内部的内容!
,override 可以覆盖基类的方法,让基类的方法以子类的内容实现,
而 new 不用来覆盖基类的方法,而是全新定义一个子类的方法,这个
方法只属于子类,与基类的方法无关,只是名字上相同而已
先看 abstract 和 override 使用方法
abstract class Base
{
public virtual void work()
{
MessageBox.Show("基类--开始工作");

}
public virtual void outwork()
{
MessageBox.Show("基类--下班");
}
Public abstract void Pay(); //声明抽象方法,必须
要被子类 new 或 override;只有当类是 abstract 时才可以声明
abstract 方法
}
class Employee : Base
{
public new void work()
{
MessageBox.Show("子类(new)--开始工作");
}
public override void outwork() //覆写抽象方法(一
定要在子类覆写父类的抽象方法)
{
MessageBox.Show("子类(override)下班");
}
}

//测试代码
Code
new 声明的方法,当使用子类的类型来调用的时候,它会运行子类
中的函数,而如果类型是基类的话,被隐藏的基类函数就会站到前
台来。只有使用 virtual 定义基类中的函数,并使用 override 标
记子类中的函数,才可以达到想要的多态类(始终调用子类的方
法)。
在子类中 new 父类中的方法,父类中的方法不一定是虚类型,即
virtual
但是在子类中 override 父类中的方法,父类的方法一定得是虚类
型,
代码示例:
abstract class Animal
{
public abstract void Drink();
public abstract void GotoBed();
}
class Dog : Animal
{
public override void Drink()
剩余18页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0