Подтвердить что ты не робот

Какая потребность в интерфейсе маркера, когда Атрибуты служат цели?

Я немного смущен о

Цель интерфейса Marker Vs Атрибуты.

Их цель выглядит так же, как и я (простите меня, если я ошибаюсь).

Может кто-нибудь объяснить, как они различаются по назначению?

4b9b3361

Ответ 1

Вот некоторые преимущества обоих.

Интерфейсы маркера:

  • немного легче проверить на использование проверок динамического типа ('obj - IMarker ');
  • позволяют расширять функциональность и расширяемость данных в будущем (т.е. превращать "маркерный" интерфейс в "полный" интерфейс, который фактически объявляет некоторые элементы);
  • может использоваться в ограничениях общего типа;

С другой стороны, атрибуты:

  • обеспечивает более четкое разделение метаданных;
  • позволяют указывать дополнительную информацию через свои конструкторы или свойства;
  • разрешить нескольким приложениям сущность;
  • являются универсальными с точки зрения применимости к различным типам сущностей, а не только к классам;

В значительной степени это зависит от конкретной архитектуры приложения и дизайна, целесообразно ли использовать интерфейс маркера или атрибут в конкретном случае.

Ответ 2

Несколько лет назад, в эпоху pre Java 5, Java не поддерживала атрибуты. Поэтому, чтобы "пометить" класс или интерфейс, чтобы их можно было проверить во время выполнения, вы должны использовать интерфейсы маркеров, которые в основном представляют собой пустой интерфейс, но вы все равно можете проверить, может ли экземпляр быть добавлен в этот интерфейс.

В .NET интерфейсы маркеров не должны использоваться, кроме случаев специального использования (например, использование методов расширения), поскольку атрибуты обеспечивают лучший способ маркировать классы (и многое другое) с помощью метаинформации. То же самое касается Java 5 и новее, где были введены аннотации и их следует использовать вместо этого.

Ответ 3

Если вы можете использовать его, предпочтительным является Атрибут.

Но есть несколько функций, связанных со статическим набором текста, который может предложить только интерфейс:

  • Вы можете добавить к нему методы расширения
  • Вы можете использовать его как общее ограничение

Ответ 4

В стороне, гораздо быстрее проверить интерфейс, поскольку CLI предназначен для этого и имеет коды операций для него (как и С#: is/as).

Проверка атрибутов требует отражения; гораздо медленнее.

Взгляд, хотя другие ответы на большинство вопросов рассматриваются, но также: атрибуты гораздо более ограничены с точки зрения того, какие значения вы можете передать им; главным образом примитивов и строк.