В руководствах по кодированию .NET говорится, что наличие пустого базового класса или интерфейса (также называемого «теговым» интерфейсом) действительно плохой стиль. Предпочтительным стилем является использование атрибута для аннотирования классов одного типа. Существует также правило FxCop для обеспечения соблюдения этого соглашения.
Однако я иногда (в редких случаях) использую эту идиому, когда общий базовый класс полезен для обозначения общей иерархии, даже если не существует общей функциональности. Атрибуты не могут быть использованы для этого.
Например, в интерпретаторе языка программирования несколько методов возвращают специальный базовый класс Value
, то есть нечто, имеющее значение внутри этого языка программирования. По сути, это значение может быть всем от числа до строки (которые являются специальными классами, а не System.Int32
или System.String
) до составного объекта. Я мог бы также вернуть System.Object
, но это сделало бы более слабой типизацию моего открытого интерфейса.
Хороший, самодокументированный код получает выгоду от ограниченного интерфейса.