C#中的CoClass属性是做什么用的?

45

我在我们正在使用的第三方库中发现了以下类似的代码。

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

这段代码究竟在做什么?MSDN文档并没有充分解释,无法让我理解。


1
CoClass 是 COM 的概念。如果你不了解 COM,那么你就无法理解 CoClass - John Saunders
5
这个问题的讨论可能会对你有所帮助:https://dev59.com/SXNA5IYBdhLWcg3wGJwV - rsbarro
1个回答

63
它宣布了接口 Blah 应由特定类实现。这意味着您可以方便地说 new Blah,运行时将知道要创建什么对象 - 这在接口中通常是不可能的。
如果您查看生成的 BlahClass 声明,它可能会有一个与之关联的 Guid,可用于创建 COM 对象的实例。

好的,在看到周围代码后,这很有道理。谢谢!除了 COM 的事情之外,这种方法与仅实现接口相比是否有任何优势? - Robert Gowland
我需要你评论中@RobertGowland的答案。实现这个类是必要的,还是声明接口就足够了? - Rikki
2
@MohammadGoudarzi 属性 [CoClass(typeof(BlahClass))] 提到了类 BlahClass,因此该类必须存在于某个地方。并且它必须实现接口 Blah。在从 COM 类型库生成的互操作程序集中,BlahClass 实际上将是一个 COM 对象(可能是用 C++、VB6、Delphi 或其他语言实现的)。 - Daniel Earwicker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接