CA1405: базовые типы, относящиеся к типу видимых COM-клиенту, должны быть видимыми для COM

Товар Значение
Идентификатор правила CA1405
Категория Microsoft.Interoperability
Критическое изменение DependsOnFix

Причина

Видимый тип объектной модели компонента (COM) является производным от типа, который не отображается COM.

Описание правила

Когда видимый тип COM добавляет элементы в новую версию, он должен соблюдать строгие рекомендации, чтобы избежать нарушения com-клиентов, которые привязываются к текущей версии. Тип, невидимый для COM, предполагает, что он не должен следовать этим правилам управления версиями COM при добавлении новых членов. Однако если видимый тип COM является производным от невидимого типа COM и предоставляет интерфейс System.Runtime.InteropServices.ClassInterfaceType класса или ClassInterfaceType (по умолчанию), все общедоступные члены базового типа (если они не помечены как com-невидимые, которые будут избыточными) предоставляются COM. Если базовый тип добавляет новые члены в последующей версии, все COM-клиенты, которые привязываются к интерфейсу класса производного типа, могут нарушиться. Видимые типы COM должны быть производными только от видимых типов COM, чтобы снизить вероятность нарушения com-клиентов.

Устранение нарушений

Чтобы устранить нарушение этого правила, сделайте базовые типы COM видимыми или производным типом COM невидимым.

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере показан тип, нарушающий это правило.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(false)]
   public class BaseClass
   {
      public void SomeMethod(int valueOne) {}
   }

   // This class violates the rule.
   [ComVisible(true)]
   public class DerivedClass : BaseClass
   {
      public void AnotherMethod(int valueOne, int valueTwo) {}
   }
}

См. также