CA1405:COM 可见类型的基类型应对 COM 可见
类型名 |
ComVisibleTypeBaseTypesShouldBeComVisible |
CheckId |
CA1405 |
类别 |
Microsoft.Interoperability |
是否重大更改 |
DependsOnFix |
原因
从非 COM 可见的类型派生的组件对象模型 (COM) 可见的类型。
规则说明
当 COM 可见类型在新版本中添加成员时,必须遵循严格的准则,以避免中断绑定到当前版本的 COM 客户端。 COM 不可见的类型假定在添加新成员时,不需要遵守这些 COM 版本规则。 但是,如果某个 COM 可见类型是从 COM 不可见类型派生的,并公开 ClassInterfaceType.AutoDual 或 AutoDispatch(默认值)的类接口,则将向 COM 公开基类型的所有公共成员(除非它们被明确标记为 COM 不可见,但这将是冗余的)。 如果基类型在后续版本中添加新成员,则绑定到派生类型的类接口的所有 COM 客户端都可能会中断。 COM 可见类型只应当从 COM 可见类型派生,以减小中断 COM 客户端的可能性。
如何解决冲突
若要修复与该规则的冲突,请使基类型对于 COM 可见或者使派生类型对于 COM 不可见。
何时禁止显示警告
不要禁止显示此规则发出的警告。
示例
下面的示例演示一个与该规则冲突的类型。
Imports System
Imports System.Runtime.InteropServices
<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary
<ComVisibleAttribute(False)> _
Public Class BaseClass
Sub SomeSub(valueOne As Integer)
End Sub
End Class
' This class violates the rule.
<ComVisibleAttribute(True)> _
Public Class DerivedClass
Inherits BaseClass
Sub AnotherSub(valueOne As Integer, valueTwo As Integer)
End Sub
End Class
End Namespace
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
[ComVisible(false)]
public class BaseClass
{
public void SomeMethod(int valueOne) {}
}
// This class violates the rule.
[ComVisible(true)]
public class DerivedClass : BaseClass
{
public void AnotherMethod(int valueOne, int valueTwo) {}
}
}
请参见
参考
System.Runtime.InteropServices.ClassInterfaceAttribute