C# 中方法或属性隐藏的优点和缺点是什么。
问问题
2136 次
2 回答
3
使用new
关键字隐藏方法具有打破多态性的效果。如果您使用方法隐藏,则在通过其基类型或接口访问方法时无法调用隐藏行为。
void Main()
{
var nohiding = new NoHiding();
var hiding = new Hiding();
nohiding.DoSomething(); // "Overridden Method"
hiding.DoSomething(); // "Hidden Method"
var nohidingAsBase = (Base) nohiding;
var hidingAsBase = (Base) hiding;
nohidingAsBase.DoSomething(); // "Overridden Method"
hidingAsBase.DoSomething(); // "Base Method"
}
public class Base
{
public virtual void DoSomething()
{
Console.WriteLine("Base Method");
}
}
public class NoHiding : Base
{
public override void DoSomething()
{
Console.WriteLine("Overriden Method");
}
}
public class Hiding : Base
{
new public void DoSomething()
{
Console.WriteLine("Hidden Method");
}
}
至于您的优点/缺点问题,没有明确的清单。方法隐藏用的很少,我会说它有点像goto
关键字。一般来说,这不是你应该使用的东西,但在特定情况下它会很有帮助。
于 2012-07-22T14:35:36.287 回答
2
我认为隐藏财产没有任何优势。当基类中的属性或方法未定义为虚拟或抽象时,或者当您的方法与基类方法的返回类型不同时,您必须这样做。缺点很明显。基类方法仍然存在,您无法强制类用户使用您的方法:
Derived d = new Derived();
((Base)d).DoSomething() // this will call the base method
于 2012-07-22T14:38:15.367 回答