为什么 System.IO.Path(只有静态成员的 class)COM 可见?

Why is System.IO.Path (a class with only static members) COM visible?

为什么仅包含静态成员和字段的 System.IO.Path COM 可见?

[ComVisibleAttribute(true)]
public static class Path

我的印象是不能调用 COM 对象的静态成员函数(此外,class 需要一个 Path 没有的默认构造函数)。

另请注意 SO 用户 sharptooth 评论:

It is also worth noting that it doesn't have Guid attribute which most likely means the class id will be regenerated each time it is compiled.

为什么 PATH COM 可见,可以用它做什么?

当然,这是一个错误。这是一个很好的伙伴,来自 mscorlib 的许多其他 classes 也有同样的问题。例如注册表、目录、文件、缓冲区、环境、可为空、监视器、超时。但并不一致,BitConverter、Console、Convert、GC、Math 等的属性被正确省略。

该属性对于 mscorlib 中的许多 classes 很重要,自定义 CLR 主机和脚本语言都依赖于它。看起来应用该属性的 Microsoft 程序员只是在自动驾驶仪上运行。这个错误无关紧要,Tlbexp 知道如何处理它。 coclass 获得 [noncreatable] 属性,因此客户端程序无法创建 class 的实例。并且自动生成的界面是空的。所以这个类型根本不可用,你也不会不小心使用它。

如果您实际上想要从 COM 客户端程序使用 System.IO.Path,那么您必须为其编写一个 [ComVisible] 包装器 class。当然是非静态的,您编写的每个方法都可以直接委托给 Path 方法之一。您想要 coclass 上的 [appobject] 属性,以便它在支持该属性的客户端程序中静态运行,遗憾的是 .NET 没有它的属性。