gpt4 book ai didi

c# - 为什么 IDisposable 具有 [ComVisible(true)] 属性?

转载 作者:行者123 更新时间:2023-11-30 22:11:52 24 4
gpt4 key购买 nike

我继承了我工作的一个大型遗留 ASP.NET 应用程序,我们公司希望我们使用 FxCop 并修复所有主要的规则违规问题。目前似乎普遍存在的规则如下:

CA1405: COM visible type base types should be COM visible

我们应用程序中的每个 ASP.NET 页面/控件似乎都违反了此规则。起初我不确定为什么,但最终我意识到这是由于以下继承链造成的:

System.IDisposable  → System.Web.UI.Control    → System.Web.UI.TemplateControl      → System.Web.UI.Page

I also realized IDisposable is defined as:

[ComVisible(true)]
public interface IDisposable
{
void Dispose();
}

总结一下:所有 ASP.NET 页面/控件都继承自 IDisposable,并且 IDisposable 具有 [ComVisible(true)] 属性,这意味着所有页面/控件都将无法通过此规则。

这对我们造成了伤害,因为我们的应用程序有数千个页面和控件,因此有数以千计的违规行为。禁用规则不是一个选项,因为我们有一套“公司标准”的 FxCop 规则。似乎 FxCop 希望我们遍历并将此属性放在我们应用程序的每个页面上,我真的对这样做不感兴趣。

我的问题是,为什么 IDisposable 首先具有 [ComVisible(true)] 属性?

最佳答案

IDisposable 被标记为 COMVisible,以便在 COM 应用程序中使用 .Net 组件时允许处置资源。

在从 VB6 应用程序过渡到完整的 .Net 应用程序时,我们实际上大量使用了它:我们能够在遗留 VB6 应用程序中重用 .Net 功能(数据库访问),但必须使用 IDispose 接口(interface)来确保诸如此类的事情因为当我们使用完该对象时,数据库连接已被正确清理。

关于c# - 为什么 IDisposable 具有 [ComVisible(true)] 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022757/

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