CA1402: не используйте перегрузки в интерфейсах, видимых в COM
Товар | Значение |
---|---|
Идентификатор правила | 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);
Клиенты COM Visual Basic 6 не могут реализовать методы интерфейса с помощью подчеркивания в имени.
Устранение нарушений
Чтобы устранить нарушение этого правила, переименуйте перегруженные методы таким образом, чтобы имена были уникальными. Кроме того, сделайте интерфейс невидимым для COM, изменив специальные возможности internal
(Friend
в Visual Basic) или применив набор атрибутов System.Runtime.InteropServices.ComVisibleAttribute к false
.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере показан интерфейс, который нарушает правило и интерфейс, удовлетворяющий правилу.
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
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по