Автоматический вызов функции № 2 при вызове функции № 1 - PullRequest
3 голосов
/ 09 марта 2009

Это должно быть быстро. Можно ли сделать что-то вроде этого:

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

void functionY()
{
}

Так что, когда вызывается функция X, функция Y также вызывается автоматически? Причина, по которой я спрашиваю, заключается в том, что я собираюсь реализовать сетевые функции в небольшом игровом движке на основе XNA и хочу отметить функции как синхронизированные, чтобы отметить, что при вызове функции ее следует вызывать для всех клиентов.

Спасибо.

Ответы [ 5 ]

8 голосов
/ 09 марта 2009

Звучит так, как вы хотите Аспектно-ориентированное программирование .

Я использовал PostSharp для этого до сих пор, и он работает довольно хорошо.

5 голосов
/ 09 марта 2009

Вы, вероятно, можете сделать это довольно легко с PostSharp , но в целом: нет; Вы должны были бы назвать это явно.

4 голосов
/ 09 марта 2009

Да, вы можете просто создать их в качестве делегата.

Action foo = functionX;
foo += functionY;

foo(); // both called

ОБНОВЛЕНИЕ: Джон (спасибо) указал, что порядок вызова фактически определен. Однако я бы НИКОГДА не полагался на это. Смотрите комментарии.

2 голосов
/ 09 марта 2009

Есть ли причина, по которой вы не можете сделать это:

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

На основании описания в вопросе это правильный ответ. Я полагаю, что вы уже рассмотрели это.

Другая возможность - использовать систему событий в ваших интересах, что-то вроде (некомпилированное):

event Action FunctionXCalled;

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

void functionY() { }

void functionX()
{
    if(FunctionXCalled != null) FunctionXCalled();
    // ... etc
}
0 голосов
/ 09 марта 2009

как насчет:

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

void functionY() {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...