Sdílet prostřednictvím


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