There may be methods that need an IAll argument, so if you meet the requirements for implementing the entire IAll , it is convenient to do this, and not just implement each of the interfaces that it extends!
Usually, of course, the interfaces are not empty, so there is a certain (maybe small) cost when implementing one and / or the other (you need to implement various, several methods). If, say, IFirst has a foo method, and ISecond has a bar method, it makes sense to extend both to IBoth , even if this does not add additional necessary methods - this allows you to clearly express that it needs an argument that has both methods , foo and bar .
If every interface in the world was empty, their use (a much smaller extension of them using an empty interface) would be much more doubtful, of course! -)
Alex martelli
source share