2010-07-20 6 views
2

Мне любопытно, можно ли сделать 2 интерфейса в .NET (либо в той же сборке, либо в отдельных сборках), которые можно рассматривать как эквивалентные, используя новый атрибут TypeIdentifierAttribute. Я не нашел пути.Можем ли мы использовать TypeIdentifierAttribute в .NET без COM?

Я видел некоторые вещи в Интернете, которые предполагают, что в конечном итоге это будет возможно, но это похоже на то, что текущая реализация предназначена только для COM-перехватов. Я понимаю, что непосредственные намерения для этого заключались в том, чтобы внедрить COM-переходы. Я не имею дело с COM-перехватами.

Кроме того, мне не интересно обсуждать, почему я хотел бы это сделать, я не хочу приводить этот вопрос к другим типам решений. Давайте просто скажем, что я экспериментирую, и я хочу посмотреть, есть ли что-нибудь, что мы можем сделать с TypeIdentifierAttribute.

ответ

3

Согласно как documentation, так и anecdotal evidence, можно сделать работу по эквивалентности типов со стандартными, не COM-интерфейсами.

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

  1. Убедитесь, что оба они имеют одинаковое имя и живут в одном и том же пространстве имен.
  2. Приложите GuidAttribute к ним обоими, назначив им тот же Guid.
+0

Благодарю вас, вторая ссылка привела меня к http://blogs.msdn.com/b/mshneer/archive/2008/10/28/advances-in-net-type-system-type-equivalence- demo.aspx, в котором был демонстрационный исходный код, который был очень полезен. –