override与new的区别

昨天参加面试,遇到一个关于new修饰符的题,由于本人不慎,给搞错了,纠其原因,还是因为我的C#基础知识不牢固,关于override与new的区别平时没有太注意。在此,为大家分享一下:
代码如下:

 public class baseClass
    
{
        
public baseClass()
        
{
            Method1();
        }

        
public virtual void Method1()
        
{
            Console.WriteLine(
"Method1 in baseClass");
        }

    }


    
public class derivedClass : baseClass
    
{
        
private int value;
        
public derivedClass()
        
{
            value 
= 2;
        }

        
public override void Method1()
        
{
            
if (value == 2)
                Console.WriteLine(
"value==2");
            
else
                Console.WriteLine(
"value!=2");           
        }

    }


问题:
1、初始化一实例:baseClass tempClass=new derivedClass()之后,会输出什么结果?
2、把derivedClass类中的override换成 new之后,又会输出什么结果?

正确答案:
1、value!=2
2、Method1 in baseClass
MSDN上说:new 关键字在用作修饰符时,可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。也就是说,在用new关键字时,派生类与基类的这两个相同签名的方法已经没有任何联系了。
而用override时,它与new的区别主要是,overrid是重写了基类的方法,new是隐藏、覆盖了基类的方法。。

posted @   任力  阅读(3160)  评论(22编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示