It's not a mistake. From the ECMA CLI Specification :
8.9.11 Interface Type Inference
Interface types may require the implementation of one or more other interfaces. Any type that implements interface type support should also support any of the required interfaces defined by that interface. This differs from object type inheritance in two ways:
- Object types form a single inheritance tree; interface types no.
- Object type inheritance determines how implementations are inherited; There are no required interfaces, because interfaces do not define an implementation. The required interfaces specify additional contracts that the type of implementation object should support.
To highlight the last difference, consider the IFoo interface, which has a single method. The interface, IBar , which derives from it, is requiring that any type of object that supports IBar also supports IFoo . It says nothing about what IBar methods will have.
8.10 Member Inheritance
Only object types can inherit implementations, therefore, only object types can inherit members (see ยง8.9.8). Although interface types can be derived from other types of interfaces, they only "inherit" the requirement to implement contract methods, never fields or methods.
Edit ...
If you want to get the properties of an interface, including its ancestors, you can do something like this:
var properties = typeof(IFoo) .GetProperties() .Union(typeof(IFoo) .GetInterfaces() .SelectMany(t => t.GetProperties()));
source share