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 可見的實值類型中使用非公用欄位
CA1017:以 ComVisibleAttribute 標記組件