2011-08-05 2 views
35

Я нашел код в библиотеке сторонних разработчиков, которую мы используем.Что делает атрибут C# CoClass?

[CoClass(typeof(BlahClass))] 
public interface Blah : IBlah 
{ 
} 

Что это такое? Документация msdn не освещала предмет, достаточный для меня.

+1

'CoClass' - концепция COM. Если вы не понимаете COM, тогда вы не поймете «CoClass». –

+5

Обсуждение этого вопроса могло бы помочь: http://stackoverflow.com/questions/1093536/how-does-the-c-compiler-detect-com-types – rsbarro

ответ

52

Он заявляет, что интерфейс Blah предназначен для реализации определенным классом. Это означает, что вы можете удобно сказать new Blah, и среда выполнения будет знать, какой объект создать - что-то, что обычно невозможно с интерфейсом.

Если вы посмотрите на сгенерированное объявление для BlahClass, у него предположительно будет связанный с ним связанный с ним Guid, который может быть использован для создания экземпляра COM-объекта.

+0

ОК, это имеет смысл в свете того, что я вижу в окружающем коде. Благодаря! Помимо COM-объекта, есть ли какое-то преимущество для этого метода, а не только реализация интерфейса? –

+0

Мне нужен ответ вашего комментария @RobertGowland. Нужно ли реализовать этот класс или объявить интерфейс достаточно? – Rikki

+1

@MohammadGoudarzi Атрибут '[CoClass (typeof (BlahClass))]' упоминает класс 'BlahClass', так что класс должен где-то существовать. И он должен реализовать интерфейс 'Blah'. В сборке interop, сгенерированной из библиотеки типа COM, 'BlahClass' действительно будет COM-объектом (возможно, реализованным в C++, VB6, Delphi или что-то еще полностью ...) –

Смежные вопросы