c#中new、Override到底是什么区别

昨天面试问到了new的几种用法以及与Override的区别,有点模糊

回来google下,new的用法有以下3中

1、运算符:初始化对象和调用构造函数

2、修饰符:隐藏基类方法

3、于在泛型声明中约束可能用作类型参数的参数的类型

 

至于作为修饰符和override的区别,看了下文章不太明白,写了个例子,运行结果,发现了差异,下面分享下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        abstract public  class Test
        {
            public  virtual void Prinf()
            {
                Console.WriteLine("Abstract Printf...");
            }

        }
        public class Class1 : Test
        {
            public override void Prinf()
            {
                
                Console.WriteLine("Class One Override Printf...");
            }
        }
        public class Class2 : Test
        {
            public new void Prinf()
            {
                
                Console.WriteLine("Class Two New Printf...");
            }
        }

        static void Main(string[] args)
        {
            Class1 cls1 = new Class1();
            Class2 cls2 = new Class2();
            cls1.Prinf();
            cls2.Prinf();
            ((Test)cls1).Prinf();
            ((Test)cls2).Prinf();
            Console.ReadLine();
        }
    }
}

 运行结果如下:

相信大家也看明白了,原来是这样

new隐藏基类方法后,通过转换为基类型,仍然可以调用基类的虚方法;

而override则完全将基类的方法进行了重写,即使将子类型转换为基类型,调用的仍然是重写后的方法。。。

所以new 是隐藏基类方法,而Override是重写基类方法咯

 

-_-!多少年前的东西了。。。。

 

posted @ 2012-03-08 11:07  xingluoyuanye  阅读(472)  评论(0编辑  收藏  举报