Es gibt mehrere Möglichkeiten, wie Sie das erreichen können:
-Code Contracts :
Wenn Sie verwenden Microsoft's Code Contract Extensions, können Sie einen Flag in method1
festlegen, die Sie in benötigen, können method2
private bool hasRunMethod1 = false;
public void method1()
{
Contract.Ensures(this.hasRunMethod1);
//Method 1
hasRunMethod1 = true;
}
public void method2()
{
Contract.Requires(this.hasRunMethod1);
//Should call this only after calling method1
}
Der Hauptvorteil des Code Kontrakte ist hasRunMethod1
direkt im Code zu überprüfen, ob die statischen checker bei der Kompilierung die Voraussetzung überprüfen können. Um dem statischen Prüfer einen Hinweis zu geben, definiert method1
eine Nachbedingung mit Ensures
.
Template Methoden:
Wenn Sie wollen sie keinen Code Verträge verwenden, oder Sie können nicht (zum Beispiel wenn Ihre Version von Visual Studio erlaubt es nicht) verwenden, können Sie the template method pattern verwenden. Das würde funktionieren wahrscheinlich nur in bestimmten Szenarien aber:
abstract class Base {
private void method1()
{
//Method 1
}
private void method2()
{
//Method 2
}
protected abstract void BetweenMethod1And2();
public void RunTemplateMethod() {
method1();
BetweenMethod1And2();
method2();
}
}
Sie müssen von Base
und implementieren BetweenMethod1And2
für den Zwischencode abzuleiten.
Privat-Token:
Eine andere Möglichkeit wäre method1
Rückkehr zu lassen ein Zeichen, dass method2
Bedürfnisse, sondern dass es nur bieten kann. Sie würden allerdings müssen dafür sorgen, dass nur method1
es liefern kann, zum Beispiel mit einer privaten Implementierung einer abstrakten Klasse:
abstract class Token {};
class EncapsulatingClass {
private class PrivateToken : Token {};
public Token method1()
{
//Method 1
return new PrivateToken();
}
public void method2(Token token)
{
if ((token as PrivateToken) == null) {
throw new ArgumentException();
}
//Method 2
}
}
Warum nicht 'method1()' von innen aufrufen? oder mit einer 'bool'-Variablen, die auf true gesetzt wird, nachdem' method1' aufgerufen wurde und das in 'method2' überprüft wird? –
Muss es diejenigen genannt werden? Oder immer, bevor er den anderen anruft. –