2019.03.29 读书笔记 关于override与new

差异:override:覆盖父类分方法,new 隐藏父类方法。

共同:都不能改变父类自身方法。

 public class Test
    {
        public string Name { get;  set; }
        public virtual void SetName()
        {
            Console.WriteLine("parent");
        }
    }
    public class Testchildren:Test
    {
        public override void  SetName()
        {
            Console.WriteLine("children");
            
        }
        public void Set()
        {
            base.SetName();
        }
    }
 static void Main(string[] args)
        {

            var a = new Testchildren();
            a.SetName();
            ((Test)a).SetName();
            a.Set();
            Console.ReadKey();
        }
//输出:children   children parent

  再看看new 

public class Test
    {
        public string Name { get;  set; }
        public virtual void SetName()
        {
            Console.WriteLine("parent");
        }
    }
    public class Testchildren:Test
    {
        public new void  SetName()
        {
            Console.WriteLine("children");
            
        }
        public void Set()
        {
            base.SetName();
        }
    }

 static void Main(string[] args)
        {

            var a = new Testchildren();
            a.SetName();
            ((Test)a).SetName();
            a.Set();
            Console.ReadKey();
        }
//children parent parent

  总结:调用内部base.set时,总是运行父类方法。override,外部调用set,总是运行子类set。new,外部调用set时,子类运行自己的set,隐式转换的父类也运行自己的set。

补充:那么new有三种用法,实例化,泛型约束,派生类隐藏基类方法。

猜你喜欢

转载自www.cnblogs.com/kafeibuhuizui/p/10620425.html