Empty interfaces are often used as a way of marking particular classes.

In some languages, using a marker interface is a useful design pattern, but in C# it is better to use custom attributes. Marker interfaces are always inherited and so they cannot be applied to a single class without applying it to all subclasses. Custom attributes do not have this limitation.

In this example, the IsPrintable interface has no defined methods and is simply being used as a marker.

The following example is better because it uses attributes instead.

  • Wikipedia: Marker interface pattern
  • Microsoft: Using Attributes in C#