CA1407: Vyhněte se statickým členům ve viditelných typech modelu COM
Název_typu |
AvoidStaticMembersInComVisibleTypes |
CheckId |
CA1407 |
Kategorie |
Microsoft.interoperability |
Změnit rozdělení |
Bez rozdělení |
Příčina
Obsahuje typ, který je výslovně označen jako viditelný na modelu COM (Component Object) publicstatic metoda.
Popis pravidla
COM nepodporuje static metod.
Toto pravidlo ignoruje vlastnost a událost přístupové objekty, přetížení metod nebo metod, které jsou označeny buď pomocí operátoru ComRegisterFunctionAttribute atributu nebo ComUnregisterFunctionAttribute atributu.
Standardně jsou viditelné pro COM: sestavení, veřejné typy, členy veřejné instance ve veřejné typy a všechny členy veřejné hodnoty typů.
Toto pravidlo dojít k sestavení úrovně ComVisibleAttribute musí být nastavena na false a třída - ComVisibleAttribute musí být nastavena na true, jak ukazuje následující kód.
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace Samples
{
[ComVisible(true)]
public class MyClass
{
public static void DoSomething()
{
}
}
}
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla změnit návrh metoda instance, který poskytuje stejné funkce jako static metoda.
Při potlačení upozornění
Je bezpečné potlačí upozornění od tohoto pravidla, pokud klient COM nevyžaduje přístup k funkcím, které poskytuje static metoda.
Příklad narušení
Description
Následující příklad ukazuje static metoda, která toto pravidlo porušují.
Kód
using System;
using System.Runtime.InteropServices;
using System.Collections.ObjectModel;
[assembly: ComVisible(false)]
namespace Samples
{
[ComVisible(true)]
public class Book
{
private Collection<string> _Pages = new Collection<string>();
public Book()
{
}
public Collection<string> Pages
{
get { return _Pages; }
}
// Violates this rule
public static Book FromPages(string[] pages)
{
if (pages == null)
throw new ArgumentNullException("pages");
Book book = new Book();
foreach (string page in pages)
{
book.Pages.Add(page);
} return book;
}
}
}
Komentáře
V tomto příkladu Book.FromPages nelze volat metodu z modelu COM.
Například oprava
Description
Vyřešit narušení v předchozím příkladu, nelze změnit metodu metodu instance, ale která nemá smysl v této instanci.Lepším řešením je použít explicitně ComVisible(false) metody tak, aby jej vymazat vývojáři metodu nelze pohlížet z modelu COM.
Následující příklad se vztahuje ComRegisterFunctionAttribute metodou.
Kód
using System;
using System.Runtime.InteropServices;
using System.Collections.ObjectModel;
[assembly: ComVisible(false)]
namespace Samples
{
[ComVisible(true)]
public class Book
{
private Collection<string> _Pages = new Collection<string>();
public Book()
{
}
public Collection<string> Pages
{
get { return _Pages; }
}
[ComVisible(false)]
public static Book FromPages(string[] pages)
{
if (pages == null)
throw new ArgumentNullException("pages");
Book book = new Book();
foreach (string page in pages)
{
book.Pages.Add(page);
}
return book;
}
}
}
Souvisejících pravidel
CA1017: Označte sestavení pomocí atributu ComVisibleAttribute
CA1406: Vyhněte se argumentům Int64 pro klienty jazyka Visual Basic 6
CA1413: Vyhněte se neveřejným polím v hodnotách viditelných modulem COM