c#Override和new区别

本文详细介绍了C#中的`override`和`new`关键字的区别。`override`用于重写基类的虚拟成员,确保在派生类中调用时执行当前类的实现。而`new`则隐藏基类的成员,当对象转换为基类类型时,将调用基类的成员。文章通过实例展示了两者在转换为其他类时的不同行为。
摘要由CSDN通过智能技术生成

本栏目由法外狂徒:(Zhangsan)提供"合法"行为

有些人不知道c#的Override和new区别,今天来梳理一下

override重写

故名可知,override用来重写成员的
举个例子,假如有一张公共的纸,上面写满了成员和信息,到你写的时候,发现有一个成员刚好就是自己想写的成员,于是,你先把这张纸上的对应成员给用修正带给涂抹掉,然后在写上自己的成员和信息(好残忍)

当然必须要经过别人的允许,所以被重写的成员必须加上virtual关键词才可以,表示你认同这个(不fa分子)擦除你的成员

new隐藏

继续这个(不fa分子)的(作案)手法
继续假如有一张公共的纸,上面写满了成员和信息,到你写的时候,发现有一个成员刚好就是自己想写的成员,于是,你先把这张纸上的对应成员用便利贴贴上去,然后在便利贴上写上自己的成员和信息

什么不同?

如果只是在自己的类中,是不明显的,但在转化时就非常明显了

override即使转化成其他类,在调用成员时任然就调用这个类的成员

你觉得涂改液威力大呢,还是修正带威力大呢

举例

public class TestA
{
   public virtual void YOUIS()
   {
       Console.WriteLine("hello");
   }
}

调用

TestA a = new TestA();
a.YOUIS();

输出

hello

但是这个(法外狂徒)这样操作

public class TestB : TestA
{
    public override void YOUIS()
    {
        Console.WriteLine("fuck e y");
    }
}

调用

TestB b = new TestB();
b.YOUIS();
TestA a = (TestA)b;
a.YOUIS();

输出

fuck e y
fuck e y

就好像,这个纸的主人回来,看到这个被涂改液涂改的成员,于是心里开始了激烈的斗争,到底是扣还是不扣,扣会损毁纸,不扣我得执行这个方法,但是发现这个方法写的"非常好",于是执行了这个方法

正经知识:在声明了virtual表明这个方法的信息可以重新填充,override(法外狂徒)来了

new隐藏方法,如果转化为其他类,调用就按其他类的成员调用

请问,那个便利贴贴上去就扯不下来的

举例

public class TestA
{
   public void YOUIS()
   {
       Console.WriteLine("hello");
   }
}

调用

TestA a = new TestA();
a.YOUIS();

输出

hello

但是这个(法外狂徒)这样(人性化)操作

public class TestB : TestA
{
    public new void YOUIS()
    {
        Console.WriteLine("fuck e y");
    }
}

调用

TestB b = new TestB();
b.YOUIS();
TestA a = (TestA)b;
a.YOUIS();

输出

fuck e y
hello

就好像,这个纸的主人回来,看到这个被贴上去的标签,于是气的把它撕下来(不会扔掉,转化回来会重新贴上去),执行自己的方法

正经知识:new隐藏,即使不用这个,c#也是会优先调用这个类的成员

<后续补充>
{ none }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值