views:

92

answers:

5

I know this may be basic but I cannot seem to add a member variable to an interface. I tried inheriting the interface to an abstract class and add member variable to the abstract class but it still does not work. Here is my code:

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();
}

updated base on comment of Robert Fraser

A: 

If it is something implementing classes need to implement then use a property definition i.e.

That said if it is something which needs to be private then that it not something which should be in an interface anyway.

tyranid
A: 

Since interfaces only declare non-implementation details, you cannot declare a member variable in an interface.

However, you can define a property on your interface, and implement the property in your class.

rh
A: 

Did you mean a property instead of a field?

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();
}
Zach Johnson
+1  A: 

You cannot add fields to an interface.Interface can only contain methods , so only methods , properties , events can be declared inside an interface decleration.In place of field you can use a property.

public interface IBase {  
  string ErrorMessage {get;set;}
  void AddData();  
  void DeleteData();  
}
Pawan Mishra
+1  A: 
public interface IBase {
  void AddData();
  void DeleteData();
}

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

Workd for me. You were missing the "public" and "void" on the abstract class methods.

Robert Fraser