你好,这个问题可能有点傻。
但是仍然有任何方法可以实现先决条件作为另一种方法的方法。我正在使用Visual studio(可能无关紧要)。
示例:
public void method1()
{
//Method 1
}
public void method2()
{
//Should call this only after calling method1
}
发布于 2016-12-25 16:02:52
有几种方法可以实现这一点:
代码契约:
如果使用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
}
}
发布于 2016-12-25 15:48:47
我想到的最简单的事情就是从method2执行method1:
public void method1()
{
//Method 1
}
public void method2()
{
method1();
// The rest of method2 code goes here...
}
发布于 2016-12-25 17:01:03
如上所述,您可以从第一个方法本身调用第二个方法。请注意,如果您希望仅为某些特定目的调用第二个方法,则可以使用条件运算符(if etc.)根据你的要求给method2打个电话。希望这能对你有所帮助。
https://stackoverflow.com/questions/41319485
复制相似问题