Iniziamo con una definizione allentata di "interfaccia marker" (correggimi o contestalo se non sei d'accordo):
If applied to a type, a marker interface doesn't provide any contract of methods to implement for that type. A marker interface gives semantic meaning.
Quindi, OK, va bene. Tuttavia, dare un significato a qualcosa deve alla fine avere un consumo pratico o l'uso altrove per essere di beneficio, giusto? Quindi potremmo avere due tipi che sono diversi, ma che sono (per esempio) i tipi relativi a "attività pianificate" in un sistema, quindi potremmo "decorarli" entrambi con un'interfaccia "IAmTask".
OK, quindi come lo mettiamo in pratica? Ho letto questo:
One of the benefits of a marker interface is to 'communicate a semantic constraint/guarantee that doesn't otherwise change the API'.
OK, beh, un'interfaccia marcatore non sta definendo un contratto per i metodi che devono essere presenti sul tipo, quindi quale è un esempio pratico nel codice di come un vincolo / garanzia semantica può essere in definitiva restituito all'utente e consumato in un modo che rafforza la garanzia prevista per il consumatore, senza imporre metodi sull'API? Ci deve essere un modo per farlo, altrimenti stiamo semplicemente dichiarando un significato essenzialmente inutile.