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

时间:2015-06-02 07:06:29

标签: .net com

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

[ComVisibleAttribute(true)]
public static class Path

我的印象是,无法调用COM对象的静态成员函数(此外,该类需要Path没有的默认构造函数。)

另请注意SO用户sharptooth评论:

  

值得注意的是,它没有Guid属性,这很可能意味着每次编译时都会重新生成类ID。

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

1 个答案:

答案 0 :(得分:6)

当然,这是一个错误。这是一个很好的公司,mscorlib的许多其他类都有同样的问题。例如注册表,目录,文件,缓冲区,环境,可空,监视器,超时。但不一致,BitConverter,Console,Convert,GC,Math等都正确省略了该属性。

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

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