CA1408: Nepoužívejte AutoDual ClassInterfaceType

Zboží Hodnota
RuleId CA1408
Kategorie Microsoft.Interoperability
Změna způsobující chybu Narušující

Příčina

Viditelný typ modelu COM (Component Object Model) je označen atributem ClassInterfaceAttribute nastaveným AutoDual na hodnotu ClassInterfaceType.

Popis pravidla

Typy, které používají duální rozhraní, umožňují klientům navázat se na určité rozložení rozhraní. Změny v budoucí verzi rozložení typu nebo jakéhokoli základního typu přeruší klienty modulu COM, kteří jsou navázáni na toto rozhraní. Pokud atribut není zadaný, ClassInterfaceAttribute použije se ve výchozím nastavení rozhraní pouze pro odeslání.

Pokud není označeno jinak, všechny veřejné negenerické typy jsou viditelné pro com; Všechny nepublikované a obecné typy jsou pro com neviditelné.

Jak opravit porušení

Chcete-li opravit porušení tohoto pravidla, změňte hodnotu ClassInterfaceAttribute atributu None na hodnotu ClassInterfaceType a explicitně definujte rozhraní.

Kdy potlačit upozornění

Nepotlačujte upozornění z tohoto pravidla, pokud není jisté, že rozložení typu a jeho základních typů se v budoucí verzi nezmění.

Příklad

Následující příklad ukazuje třídu, která porušuje pravidlo a opětovnou deklaraci třídy pro použití explicitního rozhraní.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(true)]
namespace InteroperabilityLibrary
{
   // This violates the rule.
   [ClassInterface(ClassInterfaceType.AutoDual)]
   public class DualInterface
   {
      public void SomeMethod() {}
   }

   public interface IExplicitInterface
   {
      void SomeMethod();
   }

   [ClassInterface(ClassInterfaceType.None)]
   public class ExplicitInterface : IExplicitInterface
   {
      public void SomeMethod() {}
   }
}

CA1403: Typy automatického rozložení by neměly být viditelné modelu COM

CA1412: Označte rozhraní ComSource jako IDispatch

Viz také