請避免在 COM 可見介面中多載
更新:2007 年 11 月
型別名稱 |
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 的 System.Runtime.InteropServices.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);
}
}