gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:57:25 27 4
gpt4 key购买 nike

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

[ComVisibleAttribute(true)]
public static class Path

我的印象是不能调用 COM 对象的静态成员函数(此外,该类需要一个 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 的许多其他类也有同样的问题。例如注册表、目录、文件、缓冲区、环境、可空、监视器、超时。但不一致的是,对于 BitConverter、Console、Convert、GC、Math 等,该属性被适本地省略了。

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

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

关于.net - 为什么 System.IO.Path(只有静态成员的类)COM 可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30589534/

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