为什么System.IO.Path COM只包含静态成员和字段时可见?
[ComVisibleAttribute(true)]
public static class Path
我的印象是,无法调用COM对象的静态成员函数(此外,该类需要Path
没有的默认构造函数。)
另请注意SO用户sharptooth评论:
值得注意的是,它没有Guid属性,这很可能意味着每次编译时都会重新生成类ID。
为什么PATH
COM可见并且可以用它做什么?
答案 0 :(得分:6)
当然,这是一个错误。这是一个很好的公司,mscorlib的许多其他类都有同样的问题。例如注册表,目录,文件,缓冲区,环境,可空,监视器,超时。但不一致,BitConverter,Console,Convert,GC,Math等都正确省略了该属性。
该属性对于mscorlib中的许多类非常重要,自定义CLR主机和脚本语言依赖于它。看起来应用该属性的Microsoft程序员只是在自动驾驶上运行。这个错误是无关紧要的,Tlbexp知道如何处理它。 coclass获取[noncreatable]属性,因此客户端程序无法创建该类的实例。并且自动生成的接口为空。所以这种类型根本不可用,你也不会意外地使用它。
如果你实际上想要从COM客户端程序使用System.IO.Path,那么你必须为它编写一个[ComVisible]包装类。当然,非静态,您编写的每个方法都可以直接委托给其中一个Path方法。你喜欢coclass上的[appobject]属性,所以它在支持该属性的客户端程序中静态运行,遗憾的是.NET没有它的属性。