Получение ошибки "необходимо объявить тело, поскольку оно не помечено как абстрактное или внешнее - PullRequest
1 голос
/ 23 августа 2010

У меня есть метод Modify, который выполняет операцию ClientModify внутри.

public bool Modify()
{
  bool retval = false;

  retval = Spa.ClientModify(col);    
}

Здесь я хотел, чтобы ClientModify выполнял только после трех событий, завершенных в обработчике событий «ServerEvents», в противном случае он должен возвращать (retval) false. Как я могу это сделать, проверяя «Spa.ClientModify»

  static private void ServerEvents(eventType type, event this_event, object passback)
    {
             if (this_event.type == eventType.SPD_spurtEvent)
            { 

           if (this_event.objectName == "ready")
            {                  
           // some operation 
            }
           else if (this_event.objectName == "info")
            {
           // some operation
            }

           else if (this_event.objectName == "serverstate")
            {
           // some operation
            }

        }

}

Итак, что я сделал, это

 public class Server : ModelObject, IServer
    {
   public class MyState
{
    public bool Method1HasExecuted { get; set; }
    public bool Method2HasExecuted { get; set; }
    public bool Method3HasExecuted { get; set; }
}
   }

        static private void ServerEvents(eventType type, event this_event, object passback)
        {
          MyState s = new MyState();

each three operation i did  check like this  s.Method1HasExecuted = true; like this 
}

and modify method i did this way
    public bool Modify()
    {
        return MyClassState.Method1HasExecuted && MyClassState.Method2HasExecuted && MyClassState.Method3HasExecuted ? Spa.ClientModify() : false;
    }

}

Тогда я получаю сообщение об ошибке Spo.Plugins.Server.MyState.Method1HasExecuted.get 'должно объявить тело, поскольку оно не помечено как абстрактное или внешнее, существует ли какой-либо другой способ

Ответы [ 6 ]

3 голосов
/ 23 августа 2010

public bool Method1HasExecuted { get; set; } - это автоматически реализованное свойство , которое доступно в C # 3.0 и далее.

Вы используете C # 2.0? Тогда вам нужно будет выписать это свойство:

private bool _method1HasExecuted;
public bool Method1HasExecuted 
{
  get { return _method1HasExecuted; }
  set { _method1HasExecuted = value; }
}
2 голосов
/ 23 августа 2010

Вы используете .net 2.0, поэтому вы не можете использовать автоматически реализованные свойства. Вам нужно изменить класс MyState, чтобы он был таким:

public class MyState 
{ 
    private bool _method1HasExecuted;
    private bool _method2HasExecuted;
    private bool _method3HasExecuted;

    public bool Method1HasExecuted
    {
        get
        {
            return _method1HasExecuted;
        }
        set
        {
            _method1HasExecuted = value;
        }
    }

    public bool Method2HasExecuted
    {
        get
        {
            return _method2HasExecuted;
        }
        set
        {
            _method2HasExecuted = value;
        }
    }
    public bool Method3HasExecuted
    {
        get
        {
            return _method3HasExecuted;
        }
        set
        {
            _method3HasExecuted = value;
        }
    }
} 
1 голос
/ 23 августа 2010
public bool Method1HasExecuted { get; set; }

Методы get / set этого свойства не реализованы, поэтому компилятор жалуется.Реализуйте и установщик и получатель свойства, чтобы избавиться от ошибки.

0 голосов
/ 23 августа 2010

Как вы это компилируете? Код public bool Method1HasExecuted { get; set; } является допустимым C # 3 (автоматически реализуемые свойства), но не допустимым C # 2 (не имеет автоматически реализуемых свойств). Для C # 2 похоже, что вы написали абстрактное или внешнее свойство, но не отметили его как таковое. Проверьте, что вы компилируете с 3.5 Framework.

0 голосов
/ 23 августа 2010

Вы не опубликовали свой интерфейс IServer, однако ошибка, скорее всего, связана с тем, что вы не реализовали все методы или свойства вашего интерфейса IServer в классе Server

Если вы используете .NET 3.5 или более позднюю версию, публичный bool Method1HasExecuted {get; задавать; } будет автоматическим свойством

Я не уверен, что полностью понимаю ваш вопрос, но вам нужно подключиться к 3 не связанным вызовам методов, чтобы вы могли пометить соответствующие логические значения в вашем классе управления состояниями?

0 голосов
/ 23 августа 2010

Как правило, ошибка, на которую вы ссылаетесь в заголовке, возникает, когда у вас есть метод, определенный как что-то отличное от abstract или extern, но у вас нет тела.Возможно, что-то вроде одного из следующих:

public virtual void DoStuff();
public int GetANumber();
public string ReturnAString();

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

Если это не так, пожалуйста, укажите метод, к которому относится ошибка компилятора (вы можете получить это, дважды щелкнув по ошибке в VS, если это не указано в сообщении об ошибке), и напишитеего код и образец кода, который ссылается на него.

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