Anonymní metody a analýza kódu
Anonymní metody je metoda, která nemá žádný název.Anonymní metody nejčastěji používaných předat jako parametr delegáta bloku kódu.
Toto téma vysvětluje, jak zpracovává analýzy kód upozornění a metriky, které jsou spojeny s anonymní metody.
Anonymní metody deklarované v člen
Varování a metriky pro anonymní metody, která je deklarována v členů například metody nebo přístupový objekt, jsou spojeny s členem, který deklaruje metodu.Nejsou přidruženy ke členu, který volá metodu.
Například v následující třídy upozornění, které se nacházejí v prohlášení o anonymousMethod by měla být zvýšena proti Method1 a Method2.
Delegate Function ADelegate(ByVal value As Integer) As Boolean
Class AClass
Sub Method1()
Dim anonymousMethod As ADelegate = Function(ByVal value As
Integer) value > 5
Method2(anonymousMethod)
End Sub
Sub Method2(ByVal anonymousMethod As ADelegate)
anonymousMethod(10)
End Sub
End Class
delegate void Delegate();
class Class
{
void Method1()
{
Delegate anonymousMethod = delegate()
{
Console.WriteLine("");
}
Method2(anonymousMethod);
}
void Method2(Delegate anonymousMethod)
{
anonymousMethod();
}
}
Vložené anonymní metody
Upozornění a metriky pro anonymní metody, která je deklarována jako přiřazení vloženého do pole jsou spojeny s konstruktoru.Pokud je pole deklarovaná jako static (Shared v Visual Basic), varování a metriky, které jsou spojeny s konstruktoru třídy; jinak jsou jim přiřazeny konstruktor instance.
Například v následující třídy upozornění, které se nacházejí v prohlášení o anonymousMethod1 bude vznesené vůči implicitně generovaná výchozí konstruktor třídy.Vzhledem k tomu, že nalezené v anonymousMethod2 proti konstruktoru třídy implicitně generovaná budou použity.
Delegate Function ADelegate(ByVal value As Integer) As Boolean
Class AClass
Dim anonymousMethod1 As ADelegate = Function(ByVal value As
Integer) value > 5
Shared anonymousMethod2 As ADelegate = Function(ByVal value As
Integer) value > 5
Sub Method1()
anonymousMethod1(10)
anonymousMethod2(10)
End Sub
End Class
delegate void Delegate();
class Class
{
Delegate anonymousMethod1 = delegate()
{
Console.WriteLine("");
}
static Delegate anonymousMethod2 = delegate()
{
Console.WriteLine("");
}
void Method()
{
anonymousMethod1();
anonymousMethod2();
}
}
Třída obsahovat anonymní metody vložené přiřadí hodnotu pole, které má více konstruktory.V tomto případě varování a metriky jsou přidruženy všechny konstruktory Pokud tento konstruktor zřetězen jiného konstruktoru ve stejné třídě.
Například v následující třídy upozornění, které se nacházejí v prohlášení o anonymousMethod by měla být zvýšena proti Class(int) a Class(string) , ale nikoli proti Class().
Delegate Function ADelegate(ByVal value As Integer) As Boolean
Class AClass
Dim anonymousMethod As ADelegate = Function(ByVal value As Integer)
value > 5
Sub New()
New(CStr(Nothing))
End Sub
Sub New(ByVal a As Integer)
End Sub
Sub New(ByVal a As String)
End Sub
End Class
delegate void Delegate();
class Class
{
Delegate anonymousMethod = delegate()
{
Console.WriteLine("");
}
Class() : this((string)null)
{
}
Class(int a)
{
}
Class(string a)
{
}
}
Přestože to může být neočekávané, tato skutečnost kompilátor výstupy jedinečná metoda pro každých konstruktor, který není součástí řetězce jiného konstruktoru.V důsledku tohoto chování jakékoli narušení, dojde v anonymousMethod musí být potlačeny samostatně.To také znamená, že pokud konstruktoru new je zavedena varování, které byly dříve potlačeny proti Class(int) a Class(string) také potlačit proti konstruktoru new.
Je lze vyřešit dvěma způsoby.Nelze deklarovat anonymousMethod v běžné konstruktoru, všechny konstruktory řetězu.Nebo ji nelze deklarovat metodu inicializace, který volá všechny konstruktory.
Viz také
Koncepty
Analýza kvality spravovaného kódu pomocí nástroje Analýza kódu