共用方式為


CA1405:COM 可見型別的基底型別應該是 COM 可見

型別名稱

ComVisibleTypeBaseTypesShouldBeComVisible

CheckId

CA1405

分類

Microsoft.Interoperability

中斷變更

DependsOnFix

原因

元件物件模型 (COM) 可見的型別衍生自非 COM 可見的型別。

規則描述

當 COM 可見型別在新版本中加入成員時,它必須遵守嚴格的方針,以免中斷繫結至目前版本的 COM 用戶端。 COM 不可見的型別假設在加入新成員時不必遵循這些 COM 版本控制規則。 但是,如果 COM 可見型別衍生自 COM 不可見的型別,並且公開 (Expose) ClassInterfaceType.AutoDualAutoDispatch (預設值) 的類別介面,則基底型別的所有公用成員 (除非這些公用成員特別標記為 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

概念

類別介面簡介

其他資源

與 Unmanaged 程式碼互通