Ich möchte eine partielle Methode von außerhalb der deklarierenden Klasse aufrufen. Dies ist nicht erlaubt, da partielle Methoden implizit privat sind. Sie können nicht einen Delegierten auf einen Teil-zu-Punkt so schlage ich folgendes:C#: Partielle Methoden und Aktion, nicht implementiert Körper
public partial class MyClass {
AnotherClass _anotherClass;
public MyClass () {
_anotherClass = new AnotherClass();
_anotherClass.Method = new Action(() => {
this.Method();
});
}
partial void Method();
//sometimes this method will be implemented
//partial void Method() {
//do something
//}
}
public class AnotherClass {
public Action Method { get; set;}
public void SomeOtherMethod(){
this.Method();
}
}
Die Klassen eng gekoppelt sind, sind sie in der Eltern-Kind-Beziehung. Ich möchte, dass das übergeordnete Element über eine Methode verfügt, die es überschreiben kann, um über Eigenschaftenänderungen für das untergeordnete Element zu erfahren. Ich könnte Event-Handler an jedes der Kinder anhängen, aber das Kind weiß bereits von seinem Elternteil, so dass das Kind den Eltern direkt informiert, scheint der Weg zu sein. Außer wenn der Elternteil egal ist, warum möchte ich in der Lage sein, eine teilweise zu implementieren, wenn ich mich interessiere. Diese Frage bezieht sich im Wesentlichen auf die Einfachheit der Programmierung im Vergleich zur Leistung. Ich weiß, dass ich Event-Handler nur an die Situation anhängen kann, in der ich mich interessiere, aber mit der Implementierung wie oben kann ich alle Teilmethoden generieren und nur die Partials implementieren, wenn es mich interessiert.
Meine Frage bezieht sich auf die Zeiten, dass die partielle Methode Method()
nicht implementiert ist. Wenn die Aktionsmethode aufgerufen wird, wird der Compiler sie optimieren, da der Textkörper leer ist. Wenn ich einen Haufen dieser Aktionsanrufe bekomme, könnte ich eine Leistungseinbuße erleiden? Gibt es eine bessere Möglichkeit, dieselbe Funktionalität zu erhalten?
Sie werden keinen spürbaren Leistungseinbruch bekommen, eine leere Aktion zu nennen ist eine ziemlich billige Operation. Ich bezweifle, dass der Compiler die Aktion void abstellen wird. –
Ich verstehe nicht, warum peope über Leistung reden. Wenn es darauf ankommt ... MEASURE IT;) –