调用函数 #1 后自动调用函数 #2

发布于 2024-07-14 16:06:01 字数 251 浏览 9 评论 0原文

这应该是一个很快的事情。 是否可以这样做:

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

void functionY()
{
}

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

谢谢。

This should be a quick one. Is it possible to do something like this:

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

void functionY()
{
}

So that when functionX is called, functionY is called automatically too? Reason I ask is because I'm going to implement networking functionality to a small XNA based game engine, and I want to mark functions as Synched, to mark that when a function gets called it should be called across all clients.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

离不开的别离 2024-07-21 16:06:02

听起来您想要面向方面的编程

我之前已经使用过 PostSharp 来实现此目的,并且效果很好。

Sounds like you want Aspect-Oriented Programming.

I've used PostSharp for this before now, and it works pretty well.

奈何桥上唱咆哮 2024-07-21 16:06:02

您可以使用 PostSharp 轻松做到这一点,但一般来说:不; 你必须明确地调用它。

You can probably do that quite easily with PostSharp, but in general: no; you'd have to call it explicitly.

伴我心暖 2024-07-21 16:06:02

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

Action foo = functionX;
foo += functionY;

foo(); // both called

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

Yes, you can, just create them as a delegate.

Action foo = functionX;
foo += functionY;

foo(); // both called

UPDATE: Jon (thanks) pointed out that invocation order is in fact determined. I would NEVER rely on this however. See comments.

梦幻之岛 2024-07-21 16:06:02

是否有某种原因您不能这样做:

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

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

另一种可能性是使用事件系统来发挥你的优势,例如(未编译):

event Action FunctionXCalled;

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

void functionY() { }

void functionX()
{
    if(FunctionXCalled != null) FunctionXCalled();
    // ... etc
}

Is there some reason you can't do this:

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

Based on the description in the question, that's a valid answer. I assume that you've considered it already, though.

Another possibility would be to use the eventing system to your advantage, something like (uncompiled):

event Action FunctionXCalled;

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

void functionY() { }

void functionX()
{
    if(FunctionXCalled != null) FunctionXCalled();
    // ... etc
}
全部不再 2024-07-21 16:06:02

怎么样:

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

void functionY() {

}

how about:

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

void functionY() {

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文