Я понимаю, что на этот вопрос есть выбранный ответ, но я думаю, что могу предложить новое понимание, которое все еще будет полезно:
Я думаю, что слово, которое вы ищете, может быть Модель . Этот термин используется для обозначения нескольких разных вещей в CS, но статья в Википедии для математическая модель описывает мою интенцию.
В этом контексте модель - это описание системы на некотором мета-языке . Система может быть полностью выражена в терминах ее трех частей: структуры; поведение; и взаимосвязанность. Классы .NET и структуры .NET совместимы с этим определением. Интерфейсов нет, потому что поведение не определено. Вы можете указать только структуру вызовов методов и объявлений членов, а также типовые контракты для операций (взаимосвязанность). Перечисления могут или не могут быть совместимы с этим определением, но, как наиболее часто используемые не являются, потому что они, как правило, не выражают поведение. Исключением являются перечисления, для которых побитовые операции являются достаточными представлениями значимых операций над множествами. С этим предварительным условием я считаю справедливым классифицировать перечисление наряду с классами и структурами.
В качестве примечания, как интерфейсы, так и стандартные перечисления могут рассматриваться как системы сами по себе, если методы расширения интерпретируются как присущие типам, которые они расширяют. Однако ни компилятор, ни я не считаем методы расширения внутренними по отношению к типу первого операнда. Более точная интерпретация будет состоять в том, чтобы рассматривать перечисление / интерфейс и метод расширения как необходимые компоненты системы. Разница между этими компонентными типами, которые являются расширенными, и перечислением class / struct / special-case является то, что перечисление class / struct / special-case является самой системой и, следовательно, подсистемой, содержащей ее. system, тогда как тип component является компонентом, но не системой сам по себе.
Вероятно, стоит пояснить, что согласно этой интерпретации термин модель аналогичен типу, тогда как термин system аналогичен экземпляру. Система может также применяться к большему составу, такому как сборка, но вопрос не в этом.
Оператор "Все реализации метода C # должны быть объявлены как члены модели ", похоже, работает. Это также логически не влечет за собой то, что «все модели могут содержать пользовательские реализации методов», поэтому мы в безопасности в особом случае теоретико-множественных перечислений. Это также будет работать в случае, когда моделируемая система является композицией реализаций и интерфейсов метода статического расширения.
1031 *