5

Java では、次のように、インスタンスの作成時に抽象メソッドをオーバーライドまたは実装できます。

AbstractClass test =new AbstractClass() 
{
    public void AbstractMethod(string i) {

    }
    public void AbstractMethod2(string i) {

    }
};

これはC#で可能ですか? はいの場合、同等のコードは何ですか

ありがとう

4

3 に答える 3

8

この Java 機能は、 「インスタンス作成時のメソッドのオーバーライド」ではなく、「匿名クラス」と呼ばれます。C# には同じ機能はありません。

C# は別の道をたどりました。サブクラスを作成するための便利な構文を提供する代わりに、デリゲート機能を拡張して、匿名のデリゲートラムダを提供しました。ラムダを使用すると、コードをプラグインできます。

于 2012-05-27T20:19:24.400 に答える
2

ラムダを巧みに使用することで、非常によく似たものを実現できます。

public class BaseClass {

    public BaseClass(Action<string> abs1 = null, Action<string> abs2 = null){
       AbstractMethod1 = abs1 ?? s=>{};
       AbstractMethod2 = abs2 ?? s=>{};
    }

    public Action<string> AbstractMethod1 {get; private set;}
    public Action<string> AbstractMethod2 {get; private set;}
}

したがって、次のようにこの定義を使用できます。

new BaseClass( s=> Console.WriteLine(s), s=> Console.WriteLine(s));

また、すべてのメソッドをインターフェイスの一部として定義し、インターフェイスの具体的な実装を使用してクラスを構築することもできます(具体的な実装への呼び出しをプロキシします)。これを「戦略」パターンと呼びます。しかし、それはこのテーマのバリエーションにすぎません。

于 2012-05-27T20:32:30.227 に答える
0

わかりませんが、これは の匿名型Javaような「におい」があります。C#

たとえば、次のように記述できます。

 var myNewType = new { 
                       Name = "Charles", 
                       Surname="Dickens", 
                       Age = 55 
                      };
于 2012-05-27T20:27:05.187 に答える