你好这个问题可能很傻。
但仍然有任何方法可以将先决条件作为另一种方法的方法来实现。我正在使用Visual studio(可能没关系)。
示例:
public void method1()
{
//Method 1
}
public void method2()
{
//Should call this only after calling method1
}
答案 0 :(得分:3)
有几种方法可以实现这一目标:
代码合同:
如果您使用Microsoft's Code Contract Extensions,则可以在method1
中设置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
}
与直接在代码中检查hasRunMethod1
相比,代码协定的主要优点是静态检查器可以在编译时检查前置条件。为静态检查器提供提示method1
使用Ensures
定义后置条件。
模板方法:
如果您不想使用代码合同或无法使用它们(例如,如果您的Visual Studio版本不允许),则可以使用the template method pattern。这可能只适用于特定情况:
abstract class Base {
private void method1()
{
//Method 1
}
private void method2()
{
//Method 2
}
protected abstract void BetweenMethod1And2();
public void RunTemplateMethod() {
method1();
BetweenMethod1And2();
method2();
}
}
您需要从Base
派生并为中间代码实施BetweenMethod1And2
。
私人令牌:
另一种选择是让method1
返回method2
需要的令牌,但只有它可以提供。您可能需要确保只有method1
才能提供它,例如使用抽象类的私有实现:
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
}
}
答案 1 :(得分:2)
最简单的想法是从method2执行method1:
public void method1()
{
//Method 1
}
public void method2()
{
method1();
// The rest of method2 code goes here...
}
答案 2 :(得分:0)
如上所述,您可以在第一个方法中调用第二个方法。请注意,如果您只想为某些特定目的调用第二种方法,可以使用条件运算符(如果等等)并根据您的要求调用method2。希望这会帮助你。