Как добавить переменную-член в интерфейс в C # - PullRequest
2 голосов
/ 08 апреля 2010

Я знаю, что это может быть просто, но я не могу добавить переменную-член в интерфейс. Я попытался унаследовать интерфейс от абстрактного класса и добавить переменную-член к абстрактному классу, но он все еще не работает. Вот мой код:

public interface IBase {
  void AddData();
  void DeleteData();
}

public abstract class AbstractBase : IBase {
  string ErrorMessage;
  public abstract void AddData();
  public abstract void DeleteData();
}

public class AClass : AbstractBase {
  public override void AddData();
  public override void DeleteData();
}

обновлена ​​база по комментарию Роберта Фрейзера

Ответы [ 5 ]

11 голосов
/ 08 апреля 2010

Вы не можете добавлять поля в интерфейс. Интерфейс может содержать только методы, поэтому в объявлении интерфейса могут быть объявлены только методы, свойства, события. Вместо поля вы можете использовать свойство.

public interface IBase {  
  string ErrorMessage {get;set;}
  void AddData();  
  void DeleteData();  
}
2 голосов
/ 08 апреля 2010
public interface IBase {
  void AddData();
  void DeleteData();
}

public abstract class AbstractBase : IBase {
  string ErrorMessage;
  public abstract void AddData();
  public abstract void DeleteData();
}

работал для меня. Вам не хватало «public» и «void» в методах абстрактного класса.

1 голос
/ 08 апреля 2010

Поскольку интерфейсы объявляют только детали не -реализации, вы не можете объявить переменную члена в интерфейсе.

Однако вы можете определить свойство в своем интерфейсе и реализовать свойство в своем классе.

0 голосов
/ 08 апреля 2010

Вы имели в виду свойство вместо поля?

public interface IBase {
  string ErrorMessage { get; set; }
  void AddData();
  void DeleteData();
}

public abstract class AbstractBase : IBase {
  abstract string ErrorMessage { get; set; }

  // also, you need to declare a return type for the methods
  abstract void AddData();
  abstract void DeleteData();
}
0 голосов
/ 08 апреля 2010

Если это что-то, что реализующие классы необходимо реализовать, используйте определение свойства , т.е.

Это сказало, что если это что-то, что должно быть приватным, то это не то, что должно быть в интерфейсе в любом случае.

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