gpt4 book ai didi

c# - C#中COM接口(interface)的显式接口(interface)实现

转载 作者:太空狗 更新时间:2023-10-30 01:24:29 26 4
gpt4 key购买 nike

前一段时间,我正在对一个用 COM 实现的旧 Win32 程序进行重大重构,其中有多个部分是用 C# (.NET) 实现的。在我从事该项目期间,我浏览了一个有关使用 C# 进行 COM 编程的 Microsoft 页面,该页面建议 C# 类显式实现 COM 接口(interface),而不是隐式实现。我最近试图记住为什么,但我做不到。我也无法再次在 MSDN 站点上找到该页面。任何人都可以告诉我为什么 Microsoft 会推荐这个吗?

最佳答案

嗯,这有点道理,COM 是纯粹的基于接口(interface)的编程,应该隐藏接口(interface)的实际实现。显式实现接口(interface)方法会让你自动获得它,因为它们不能公开。

实际上这样做毫无意义,您可以(并且应该)简单地将 [ClassInterface(ClassInterfaceType.None)] 属性应用于类。这本身确保了不公开实现,只有类实现的接口(interface)是可见的。显式实现接口(interface)方法实际上还不够好。因为您无法隐藏您的类继承 System.Object 的事实。它公开了 Object 的四个公共(public)方法,并在您的类型库中放置了对 mscorlib.tlb 的引用,这是一个真正的 COM 客户端永远不会使用的引用。它几乎总是有效,因为使用您的类的编译器在未安装 .NET 的机器上运行的可能性很小。但是非常令人讨厌,实际上并不是必需的。只有使用该类的机器才需要安装它。

只是不要这样做。声明您实现的接口(interface),为它们提供 [InterfaceType(ComInterfaceType.InterfaceIsDual)] 属性以允许它们在早期和后期绑定(bind)中使用。并使用 [ClassInterface(ClassInterfaceType.None)] 隐藏它们的实际实现。唯一明智的方法。

关于c# - C#中COM接口(interface)的显式接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com