写了很久的c# ,但对一些细枝末节也没有深纠,override和New就是
#region 重写
public class C1
{
public virtual string GetName()
{
return "byronLoong";
}
}
public class C2 : C1
{
public override string GetName()
{
return "龙龙";
}
}
C1 c1 = new C1();
Console.WriteLine(c1.GetName());//输出“byronLoong”
C2 c2 = new C2();
Console.WriteLine(c2.GetName());//输出“龙龙”
//重点看这里
C1 c3 = new C2();
Console.WriteLine(c3.GetName());//输出“龙龙”
#endregion
#region 覆盖
public class C1
{
public string GetName()
{
return "ByronLoong";
}
}
public class C2 : C1
{
public new string GetName()
{
return "龙龙";
}
}
C1 c1 = new C1();
Console.WriteLine(c1.GetName());//输出“ByronLoong”
C2 c2 = new C2();
Console.WriteLine(c2.GetName());//输出“龙龙”
//重点看这里,和上面的重写作比较
C1 c3 = new C2();
Console.WriteLine(c3.GetName());//输出“ByronLoong”
#endregion
总结
-
override是彻底的将这个父类的方法重写,而不是保留父类的方法隐藏起来;
-
new则是把父类隐藏起来,当用父类的标签时还会使用父类的标签,当用子类的标签时用子类的方法。