2012-05-27 13 views
5

in Java, können wir abstrakte Methoden auf Instanzerstellung außer Kraft setzen oder implementieren, wie folgt:außer Kraft setzen abstrakte Methode auf Instanzerstellung in C#

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

    } 
    public void AbstractMethod2(string i) { 

    } 
}; 

Ist das möglich? wenn ja, was ist der entsprechende Code

Dank

Antwort

8

Diese Java-Funktion "anonymous class" genannt wird, nicht „eine Überschreibung der Methode auf Instanzerstellung“. Es gibt kein identisches Feature in C#.

C# hat einen anderen Weg genommen - anstatt die Convenience-Syntax für die Erstellung von Unterklassen bereitzustellen, wurde es um seine Delegate-Funktionen erweitert und stellt anonymous delegates und lambdas zur Verfügung. Mit Lambdas können Sie Code-Teile einstecken.

0

Weiß nicht Java, aber dieses "riecht" wie Anonymous Types in C#.

var myNewType = new { 
         Name = "Charles", 
         Surname="Dickens", 
         Age = 55 
         }; 
+1

Nein, hat nicht viel mit anonymen Klassen gemeinsam - auch wenn sie ähnlich klingen. – Voo

2

Sie etwas sehr ähnlich durch geschickten Einsatz von lambdas erreichen kannst:

Zum Beispiel können Sie so etwas wie schreiben

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;} 
} 

So könnte man diese Definition wie so verwenden:

Sie können auch alle Methoden als Teil einer Schnittstelle und dann definieren konstruiere eine Klasse mit einer konkreten Implementierung der Schnittstelle (Proxying der Aufrufe an die konkrete Implementierung) - ich würde das "Strategie" -Muster nennen. Aber das ist nur eine Variation dieses Themas.

+0

Das ist nett, aber nicht etwas, über das jemand gerade C# lernen sollte :) – TDaver

+0

@TDaver, Lambda-Ausdrücke sind seit mehr als 4 Jahren Teil von .net, sie sind überall. Der Autor ist vertraut mit Java, das ein lambdas hat, also ist es kein neues Konzept, nur eine etwas andere (bessere?) Syntax. –

+0

während ich mit dir übereinstimme, dass Lambdas gut sind und verwendet werden sollten (besonders mit LINQ), aber ein Anfänger hat es schwer, die Klassenentwurfsüberlegungen einer Basisklasse zu verstehen, wie die, die du vorschlägst :) – TDaver

Verwandte Themen