6

基本的に、インスタンスを取得してリストに追加するオブジェクトがあります。各インスタンスは仮想メソッドを使用しており、インスタンスの作成後にオーバーライドする必要があります。インスタンスのメソッドをオーバーライドするにはどうすればよいですか?

4

3 に答える 3

16

できません。クラスを定義するときにのみ、メソッドをオーバーライドできます。

Func代わりに、適切なデリゲートをプレースホルダーとして使用し、呼び出し元がその方法で実装を提供できるようにするのが最善のオプションです。

public class SomeClass
{
    public Func<string> Method { get; set; }

    public void PrintSomething()
    {
        if(Method != null) Console.WriteLine(Method());
    }
}

// Elsewhere in your application

var instance = new SomeClass();
instance.Method = () => "Hello World!";
instance.PrintSomething(); // Prints "Hello World!"
于 2012-09-24T19:31:28.147 に答える
0

オブジェクトが作成されると、C# は静的であり、オブジェクトの動作を変更することはできません。継承を使用してスーパークラスをサブクラス化できますが、これは実行時ではなく設計時に行われます。

class foo
{
    public virtual void dosomething()
    {
         console.writeline("this is foo");
    }
}

class bar : foo
{
    public override void dosomething()
    {
         console.writeline("this is bar");
    }
}

var list = new Foo[]{new foo(), new bar()};

AOP - アスペクト指向プログラミングの概念もあります。これは、実行時に動作を挿入できる場所です。私が知っている2つのフレームワークがあり、これを行います

  1. キャッスル ダイナミック プロキシ
  2. Spring.Net
于 2012-09-24T19:34:33.983 に答える
0

これは実行時には不可能です。一度インスタンス化されたクラスの動作を変更することはできません。ただし、デリゲート メソッドの作成を検討することもできます。

編集、最初の答えを見ただけで、それで行きます;)

于 2012-09-24T19:37:17.970 に答える