3

这应该是一个快速的。是否有可能做这样的事情:

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

void functionY()
{
}

这样在调用 functionX 时,也会自动调用 functionY 吗?我问的原因是因为我要为基于 XNA 的小型游戏引擎实现网络功能,并且我想将函数标记为同步,以标记在调用函数时应该在所有客户端上调用它。

谢谢。

4

5 回答 5

8

听起来你想要Aspect-Oriented Programming

我以前用过PostSharp,效果很好。

于 2009-03-09T13:07:47.573 回答
5

您可以使用PostSharp很容易地做到这一点,但总的来说:不;你必须明确地调用它。

于 2009-03-09T13:07:52.487 回答
4

是的,您可以,只需将它们创建为代表即可。

Action foo = functionX;
foo += functionY;

foo(); // both called

更新:乔恩(谢谢)指出调用顺序实际上是确定的。然而,我永远不会依赖这个。看评论。

于 2009-03-09T13:10:18.300 回答
2

有什么原因你不能这样做:

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

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

另一种可能性是使用事件系统对您有利,例如(未编译):

event Action FunctionXCalled;

// somewhere in initialization...
MyCtor()
{
    FunctionXCalled += functionY;
}

void functionY() { }

void functionX()
{
    if(FunctionXCalled != null) FunctionXCalled();
    // ... etc
}
于 2009-03-09T13:08:23.187 回答
0

怎么样:

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

void functionY() {

}
于 2009-03-09T13:08:42.670 回答