2019.03.29 读书笔记 关于override与new

时间:2023-03-08 23:55:36
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有三种用法,实例化,泛型约束,派生类隐藏基类方法。