首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c#中调用method2之前,有没有办法强制调用method1

在c#中调用method2之前,有没有办法强制调用method1
EN

Stack Overflow用户
提问于 2016-12-25 15:44:28
回答 3查看 86关注 0票数 0

你好,这个问题可能有点傻。

但是仍然有任何方法可以实现先决条件作为另一种方法的方法。我正在使用Visual studio(可能无关紧要)。

示例:

代码语言:javascript
运行
复制
 public void method1()
 {
     //Method 1
 }

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

回答 3

Stack Overflow用户

发布于 2016-12-25 16:02:52

有几种方法可以实现这一点:

代码契约:

如果使用Microsoft's Code Contract Extensions,则可以在method1中设置method2中需要的标志

代码语言:javascript
运行
复制
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相比,代码契约的主要优点是静态检查器可以在编译时检查前提条件。为了给静态检查器一个提示,method1Ensures定义了一个后置条件。

模板方法:

如果您不想使用代码约定或不能使用它们(例如,如果您的Visual Studio版本不允许这样做),您可以使用the template method pattern。不过,这可能只在特定的场景中有效:

代码语言:javascript
运行
复制
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可以提供它,例如,使用抽象类的私有实现:

代码语言:javascript
运行
复制
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
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-12-25 15:48:47

我想到的最简单的事情就是从method2执行method1:

代码语言:javascript
运行
复制
public void method1()
{
    //Method 1
}

public void method2()
{
     method1();
     // The rest of method2 code goes here...
}
票数 2
EN

Stack Overflow用户

发布于 2016-12-25 17:01:03

如上所述,您可以从第一个方法本身调用第二个方法。请注意,如果您希望仅为某些特定目的调用第二个方法,则可以使用条件运算符(if etc.)根据你的要求给method2打个电话。希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41319485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档