2016-12-25 4 views
0

zwangsweise zu machen Hallo, diese Frage kann albern sein.Gibt es eine Möglichkeit, den Aufruf von method1 vor dem Aufruf von method2 in C#

Aber noch gibt es eine Möglichkeit, Voraussetzungen als Methode für eine andere Methode zu implementieren. Ich benutze Visual Studio (spielt vielleicht keine Rolle).

Beispiel:

public void method1() 
{ 
    //Method 1 
} 

public void method2() 
{ 
     //Should call this only after calling method1 
} 
+0

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? –

+0

Muss es diejenigen genannt werden? Oder immer, bevor er den anderen anruft. –

Antwort

2

Die einfachste Sache, die den Sinn kommt, ist method1 von method2 auszuführen:

public void method1() 
{ 
    //Method 1 
} 

public void method2() 
{ 
    method1(); 
    // The rest of method2 code goes here... 
} 
+0

WARUM halten Sie 'method1'' public'? – Sefe

+0

@Sefe: Weil es notwendig sein könnte, sie ohne Aufruf von method2 aufzurufen. Ich kann das unmöglich von der Frage wissen, also habe ich es öffentlich gemacht. –

3

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

Wie bereits oben vorgeschlagen Sie die zweite Methode aus dem ersten Verfahren selbst aufrufen kann. Bitte beachten Sie, dass falls Sie möchten, dass die zweite Methode nur für bestimmte Zwecke aufgerufen wird, Sie bedingte Operatoren (falls ...) verwenden können, und rufen Sie method2 entsprechend Ihren Anforderungen auf. Hoffe das wird dir helfen.

Verwandte Themen