2
public class Foo
{
    public string Test()
    {
        return GetName();
    }

    public string GetName()
    {
        return "Foo";
    }
}

public class Bar : Foo
{
    public new string GetName()
    {
        return "Bar";
    }
}


new Foo().Test(); // Foo

new Bar().Test(); // also Foo

予期しない値が生成されたときFooの動作を単体テストできるように、「ラッパー」を作成しようとしていました。ASP.NET パイプライン イベントに依存しているため、 inの動作に直接影響を与えることはできません。Test()GetName()GetName()Foo

私は望んでいた

new Bar().Test();

「バー」を返しますが、明らかに継承モデルを誤解しています。

必要なものを達成する方法はありますか?

4

1 に答える 1

3

GetNameは、Fooで仮想化され、Barクラスでオーバーライドされる必要があります。このような:

public class Foo 
{
     public string Test()     
     {         
         return GetName();
     }

     public virtual string GetName()
     {
         return "Foo";
     }
}

public class Bar : Foo 
{
     public override string GetName()
     {
         return "Bar";
     }
} 

編集:しかし、あなたの新しいコメントから、Fooを変更することはあなたにとって選択肢ではないかもしれないことがわかりました。

于 2011-12-23T09:19:16.677 に答える