共用方式為


CA1402:避免在 COM 可見介面中多載

型別名稱

AvoidOverloadsInComVisibleInterfaces

CheckId

CA1402

分類

Microsoft.Interoperability

中斷變更

中斷

原因

元件物件模型 (COM) 可見的介面宣告了多載方法。

規則描述

當多載方法會對 COM 用戶端公開 (Expose) 時,只有第一個方法多載會保留它的名稱。後續的多載則會透過將名稱附加至底線字元 '_' 和對應於多載宣告之順序的整數,重新命名為唯一的名稱。例如,考慮下列方法。

   void SomeMethod(int valueOne);
   void SomeMethod(int valueOne, int valueTwo, int valueThree);
   void SomeMethod(int valueOne, int valueTwo);

這些方法會公開給 COM 用戶端,如下所示。

   void SomeMethod(int valueOne);
   void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
   void SomeMethod_3(int valueOne, int valueTwo);

Visual Basic 6 COM 用戶端無法藉由在名稱中使用底線的方式實作介面方法。

如何修正違規

若要修正此規則的違規情形,請將多載方法重新命名,讓名稱是唯一的。此外,利用下列方式讓該介面對 COM 而言是可見的:變更存取範圍為 internal (在 Visual Basic 中為 Friend) 或是套用設定為 false 的 ComVisibleAttribute 屬性 (Attribute)。

隱藏警告的時機

請勿隱藏此規則的警告。

範例

下列範例會顯示違反規則的介面和符合規則的介面。

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   ' This interface violates the rule.
   <ComVisibleAttribute(True)> _ 
   Public Interface IOverloadedInterface

      Sub SomeSub(valueOne As Integer)
      Sub SomeSub(valueOne As Integer, valueTwo As Integer)

   End Interface 

   ' This interface satisfies the rule.
   <ComVisibleAttribute(True)> _ 
   Public Interface INotOverloadedInterface

      Sub SomeSub(valueOne As Integer)
      Sub AnotherSub(valueOne As Integer, valueTwo As Integer)

   End Interface 

End Namespace
using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   // This interface violates the rule.
   [ComVisible(true)]
   public interface IOverloadedInterface
   {
      void SomeMethod(int valueOne);
      void SomeMethod(int valueOne, int valueTwo);
   }

   // This interface satisfies the rule.
   [ComVisible(true)]
   public interface INotOverloadedInterface
   {
      void SomeMethod(int valueOne);
      void AnotherMethod(int valueOne, int valueTwo);
   }
}

相關規則

CA1413:避免在 COM 可見的實值類型中使用非公用欄位

CA1407:避免在 COM 可見類型中使用靜態成員

CA1017:以 ComVisibleAttribute 標記組件

請參閱

參考

Long 資料類型 (Visual Basic)

其他資源

與 Unmanaged 程式碼互通