【问题标题】:Why is System.IO.Path (a class with only static members) COM visible?为什么 System.IO.Path(只有静态成员的类)COM 可见?
【发布时间】:2015-08-15 20:37:11
【问题描述】:

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

[ComVisibleAttribute(true)]
public static class Path

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

另请注意SO用户sharptooth评论:

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

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

【问题讨论】:

标签: .net com


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2011-11-10
    • 2011-01-18
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多