Zeigt eine Warnung an, wenn nur eines der beiden Methoden oder Eigenschaften überschrieben wird

9

Ich habe eine c # -Klasse, die virtuelle Operationen zur Verfügung stellt. Für jede Operation existiert eine synchrone und eine asynchrone Version.

%Vor%

Ich möchte, dass der Compiler eine Warnung anzeigt, wenn nur eine Version der Operation überschrieben wird (die synchrone oder die asynchrone Version der Operation), wie der Compiler warnt, wenn Equals außer Kraft gesetzt wird, ohne GetHashCode oder zu überschreiben und umgekehrt.

Im weiteren Sinne gefragt: Ist es möglich, zu erzwingen, dass das Überschreiben einer anderen Methode oder Eigenschaft das Überschreiben anderer Eigenschaften oder Methoden erzwingt (über Compilerwarnungen).

    
HCL 30.05.2016, 10:56
quelle

3 Antworten

3

Obwohl dies keine Antwort auf Ihre eigentliche Frage ist, bitte ich um einen Ansatz, bei dem Sie die Warnung nicht einmal brauchen.

Warum erstellen Sie nicht eine abstrakte Klasse mit überschreibbaren Elementen und eine versiegelte ohne:

%Vor%

Jetzt kann der Client entwerfen, wenn er eine Implementierung von Foo mit Ihrem Standardverhalten (= DoNotImplementIt ) benötigt oder wenn er eine anpassbare Version benötigt, die ImplementIt verwendet. Im ersteren Fall ist er gezwungen, die Mitglieder in letzterem Fall außer Kraft zu setzen.

Dieser Ansatz ist für Ihren API-Benutzer viel sauberer, da er weiß, was er aus der Vererbungskette entfernen muss, anstatt sich auf unordentliche Warnungen zu verlassen, um die sich niemand kümmert.

Ein noch besserer Ansatz wäre, Foo als Schnittstelle zu definieren, die sowohl ImplementIt als auch DoNotImplementIt implementiert (klingt komisch, wie auch immer Sie es verstehen). Speichert Sie von diesem abstract override . Auf diese Weise können Sie Ihre Schnittstelle auch von außen verbergen, indem Sie internal setzen und die implementierenden Klassen nur über die API zugänglich machen.

    
HimBromBeere 30.05.2016 11:09
quelle
1

Schreiben Sie Code, der die gleiche Wirkung wie die Durchsetzung hat.

  • Erstellen Sie eine Schnittstelle mit den Methoden / Eigenschaften, die Sie überschreiben möchten.
  • Schreiben Sie eine (überschreibbare) Funktion, die die Schnittstelle zurückgibt.
  • Wenn das also überschrieben wird, werden alle Funktionen gleichzeitig ersetzt.

Beispiel:

%Vor%     
buffjape 16.01.2017 16:50
quelle
0

Sie könnten einen benutzerdefinierten Code Analyzer schreiben. Ich habe es nie selbst benutzt. Wir haben FxCop benutzt und ein paar Regeln dafür geschrieben. Aber es ist ziemlich schwierig. Mit Roslyn sollte das viel einfacher sein.

    
Stefan Steinegger 30.05.2016 11:15
quelle

Tags und Links