1

C# でメソッドまたはプロパティを非表示にすることの長所と短所は何ですか。

4

2 に答える 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 に答える