代码之家  ›  专栏  ›  技术社区  ›  Aistina

调用函数1时自动调用函数2

  •  3
  • Aistina  · 技术社区  · 16 年前

    这应该很快。是否可以这样做:

    [Callback(funtionY)]
    void functionX()
    {
    }
    
    void functionY()
    {
    }
    

    所以当函数x被调用时,函数y也会被自动调用?我问的原因是,我要实现一个基于XNA的小型游戏引擎的网络功能,我想将函数标记为已同步,以标记当一个函数被调用时,它应该跨所有客户端调用。

    谢谢。

    5 回复  |  直到 16 年前
        1
  •  8
  •   Jon Skeet    16 年前

    听起来像你想要的 Aspect-Oriented Programming .

    我已经用过 PostSharp 在这之前,它工作得很好。

        2
  •  5
  •   Marc Gravell    16 年前

    你可能很容易就能做到 PostSharp 但总的来说:不,你必须明确地称呼它。

        3
  •  4
  •   leppie    16 年前

    是的,您可以创建它们作为代理。

    Action foo = functionX;
    foo += functionY;
    
    foo(); // both called
    

    更新:jon(谢谢)指出调用顺序实际上是确定的。不过,我绝不会相信这一点。请参阅评论。

        4
  •  2
  •   Greg D    16 年前

    你为什么不能这样做?

    void functionX()
    {
        functionY();
        // ... etc
    }
    

    根据问题中的描述,这是一个有效的答案。不过,我想你已经考虑过了。

    另一种可能是利用事件系统,比如(未编译的):

    event Action FunctionXCalled;
    
    // somewhere in initialization...
    MyCtor()
    {
        FunctionXCalled += functionY;
    }
    
    void functionY() { }
    
    void functionX()
    {
        if(FunctionXCalled != null) FunctionXCalled();
        // ... etc
    }
    
        5
  •  0
  •   workmad3    16 年前

    怎么样:

    void functionX() {
       functionY();
       // Other implementation stuff
    }
    
    void functionY() {
    
    }