更新:2007 年 11 月
| TypeName | 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