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

c#中隐藏方法的优缺点?,c#,.net,C#,.net,隐藏在C#中的方法或属性的优点和缺点是什么 使用new关键字隐藏方法具有打破多态性的效果。如果使用方法隐藏,则在通过方法的基类型或接口访问方法时,无法调用隐藏的行为 void Main() { var nohiding = new NoHiding(); var hiding = new Hiding(); nohiding.DoSomething(); // "Overridden Method" hiding.DoSomething(); // "Hidden M

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

使用
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
关键字。一般来说,这不是您应该使用的,但在特定情况下它会非常有用。

通过使用
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
关键字。一般来说,这不是你应该使用的东西,但在特定情况下它会非常有用。

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

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

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

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

什么意思?使用公共和私有修饰符?而不是属性隐藏。在派生类中。我们可以隐藏其基类的方法的属性,这是什么意思?使用公共和私有修饰符?而不是属性隐藏。在派生类中。我们可以隐藏其基类的方法的属性