C# CoClass 属性有啥作用?

Posted

技术标签:

【中文标题】C# CoClass 属性有啥作用?【英文标题】:What does the C# CoClass attribute do?C# CoClass 属性有什么作用? 【发布时间】:2011-10-21 02:44:09 【问题描述】:

我在我们正在使用的第 3 方库中找到了类似以下的代码。

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


这到底是做什么的? msdn 文档没有充分阐明主题,我无法理解。

【问题讨论】:

CoClass 是一个 COM 概念。不懂COM,就不懂CoClass 关于这个问题的讨论可能会有所帮助:***.com/questions/1093536/… How does the C# compiler detect COM types?的可能重复 【参考方案1】:

它声明接口Blah 旨在由特定类实现。这意味着您可以方便地说new Blah 并且运行时将知道要创建什么对象——这在接口中通常是不可能的。

如果您查看为 BlahClass 生成的声明,它可能具有与之关联的 Guid,可用于创建 COM 对象的实例。

【讨论】:

好的,根据我在周围代码中看到的内容,这是有道理的。谢谢!除了 COM 的东西,这种方法与仅实现接口相比有什么优势吗? 我需要您@RobertGowland 评论的答案。实现这个类或者声明接口就足够了吗? @MohammadGoudarzi 属性[CoClass(typeof(BlahClass))] 提到了类BlahClass,因此该类必须存在于某处。它必须实现接口Blah。在从 COM 类型库生成的互操作程序集中,BlahClass 将实际上是一个 COM 对象(可能完全用 C++、VB6、Delphi 或其他东西实现......)

以上是关于C# CoClass 属性有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

c++ 如何在运行时获取 COM 对象 Coclass 的 progid

为啥接口上的“添加 IDL 方法”将方法添加到模块以及 CoClass?

如何防止在 ATL 类型库中公开 coclass 实现

C# 中的 OCX 组件 - 使用和部署

C#继承有啥作用

关于 CoCreateInstance() 方法实现的问题