我有两个类使用C#中的新关键字
class A
{
public virtual void Metod1()
{
Console.WriteLine("A.Method1");
}
}
class B : A
{
public new void Metod1()
{
Console.WriteLine("B.Method1");
}
}
然后我写一些代码,声明这些类的实例,并调用它们的方法
static void Main(string[] args)
{
A a = new B();
a.Metod1();
B b = new B();
b.Metod1();
Console.ReadKey();
}
我给下面的结果:
A.Method1
B.Method1
但是,当我从类B的签名method1中删除关键字new并运行Main方法时,我得到了相同的结果。 问题:为了更好的可读性,方法签名中是否有新关键字?
编辑:有没有我们不能没有新关键字的情况?
你必须使用替代或新的B类bacause否则隐藏父元素的方法..默认是新的,所以如果它给你不,你不会将新错误和运行良好.. – 2013-04-04 06:44:14
注意:在这种情况下,考虑“将代码的读者和用户混淆”作为“新”的主要用法。有些情况下使用它可能会提高可读性(即需要为一些不友好的基类推导类),但在大多数情况下,只会更难理解何时调用基类的方法以及何时派生基类。 – 2013-04-04 06:52:08