隐藏在c#中的方法的优点和缺点?

时间:2012-07-22 14:27:18

标签: c# .net

C#中隐藏方法或属性的优点和缺点是什么?

2 个答案:

答案 0 :(得分: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关键字。一般来说,这不是你应该使用的东西,但在特定情况下它可能非常有用。

答案 1 :(得分:2)

我认为财产隐藏没有任何优势。当基类中的属性或方法未定义为虚拟或抽象,或者您的方法与返回类型的基类方法不同时,您必须这样做。缺点很明显。基类方法仍然存在,并且您无法强制类用户使用您的方法:

Derived d = new Derived();
((Base)d).DoSomething() // this will call the base method