Java では、次のように、インスタンスの作成時に抽象メソッドをオーバーライドまたは実装できます。
AbstractClass test =new AbstractClass()
{
public void AbstractMethod(string i) {
}
public void AbstractMethod2(string i) {
}
};
これはC#で可能ですか? はいの場合、同等のコードは何ですか
ありがとう
この Java 機能は、 「インスタンス作成時のメソッドのオーバーライド」ではなく、「匿名クラス」と呼ばれます。C# には同じ機能はありません。
C# は別の道をたどりました。サブクラスを作成するための便利な構文を提供する代わりに、デリゲート機能を拡張して、匿名のデリゲートとラムダを提供しました。ラムダを使用すると、コードをプラグインできます。
ラムダを巧みに使用することで、非常によく似たものを実現できます。
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));
また、すべてのメソッドをインターフェイスの一部として定義し、インターフェイスの具体的な実装を使用してクラスを構築することもできます(具体的な実装への呼び出しをプロキシします)。これを「戦略」パターンと呼びます。しかし、それはこのテーマのバリエーションにすぎません。
わかりませんが、これは の匿名型のJava
ような「におい」があります。C#
たとえば、次のように記述できます。
var myNewType = new {
Name = "Charles",
Surname="Dickens",
Age = 55
};