Как выполнить метод Один раз во время выполнения на c # - PullRequest
2 голосов
/ 03 мая 2011

Есть ли возможность предотвратить выполнение метода более одного раза во время выполнения экземпляра без использования внешнего атрибута?

Надеюсь, я все понял!Bests

Ответы [ 5 ]

3 голосов
/ 03 мая 2011
public class TestClass
{
static private bool _isExecutedFirst = false;

public void MethodABC()
{
if(!_isExecutedFirst)
_isExecutedFirst = true;
else
throw Exception("Method executed before");
/////your code

} 
}

Надеюсь, эта помощь

3 голосов
/ 03 мая 2011

Попробуйте использовать статический конструктор

0 голосов
/ 03 мая 2011

Нет, нет способа предотвратить выполнение метода без сохранения какого-либо «состояния», сообщающего, что метод уже выполнен.

Одним из способов сделать это является «защита» / проверка при запуске:

private bool AExecuted = false;
public void A()
{
    if (AExecuted)
       return;
    else
       AExecuted = true;

    /* Your code */
}
0 голосов
/ 03 мая 2011

Да, вы можете использовать вот так

void method(args)
{
    static int a;
    if(a != 0)
    {
        return;
    }
    // body of method and 
    a++;
}

, поскольку этот статический a не будет скопирован в записи активации вызовов функций, и все будут использовать только один a.

Надеюсь, это решит ваш вопрос.

0 голосов
/ 03 мая 2011

конечно, с флагом, указывающим, был ли запущен метод в экземпляре.

public class RunOnceMethod
{
  private bool haveIRunMyMethod = false

  public void ICanOnlyRunOnce()
  {
    if(haveIRunMyMethod)
      throw new InvalidOperationException("ICanOnlyRunOnce can only run once");

    // do something interesting

    this.haveIRunMyMethod = true;
  }
}
...