更新:2007 年 11 月
| TypeName | AvoidOverloadsInComVisibleInterfaces | 
| CheckId | CA1402 | 
| 类别 | Microsoft.Interoperability | 
| 是否重大更改 | 是 | 
原因
COM 可见的接口声明重载的方法。
规则说明
在向 COM 客户端公开重载的方法时,只有第一个方法重载保留其名称。对于后续重载,将为其指定唯一名称,方法是在其名称后面追加一个下划线字符“_”和一个与该重载的声明顺序对应的整数。例如,考虑下列方法:
   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 属性。
何时禁止显示警告
不要禁止显示此规则发出的警告。
示例
下面的示例演示一个与该规则冲突的接口和一个满足该规则的接口。
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);
   }
}