Should interfaces define properties?

Yes, An interface should define properties when it really in need. Please suppose that. There is a IUser interface that has defined a property "Name" then you can use it without worry about if the object didn't implement the property.

public void main()
{
    IUser u = User.GetUser("id");
    string name = u.Name;
}

I think properties are perfectly acceptable in interfaces.

As you said, they really are a get, set, or get and set method. Many interfaces in the Framework define properties, such as IAsyncResult and IWebProxy.


The article you link to also states:

An interface can be a member of a namespace or a class and can contain signatures of the following members:

  • Methods
  • Properties
  • Indexers
  • Events

It is completely legitimate to define properties in interfaces. A fairly good and detailed explanation as to why you can use properties but cannot use fields is given in the answer here: Why Can's C Sharp Interfaces Contain Fields

You'll want to bear in mind that any properties defined in an interface will always be public. That is to say, if you define a getter and a setter within the interface, then both the getter and the setter must be public. You can, if you wish, define only the getter in the interface and then define a private setter in the implementing class. It's definitely an area to work carefully in.

Similarly, Java does not allow for instance variables in its interfaces. However, it does allow variables to be declared, and these will be treated as static & readonly. The convention in Java is to write getMyVariable() and setMyVariable() methods if you require them in the implementing class. C# essentially just allows for a cleaner syntax.

Tags:

C#

Interface