Métodos anônimo e análise de código
An método anônimo é apenas um método que não tem nome.Métodos anônimo com mais freqüência são usados para transmitir um bloco de código sistema autônomo um parâmetro delegado.
Este tópico explica como análise de código trata avisos e métricas associadas a métodos anônimo.
Métodos anônimo declarados dentro de um membro
Avisos e métricas para um método anônimo for declarado em um membro, sistema autônomo um método ou o acessador, estão associadas com o membro que declara o método.Eles não estão associados com o membro que chama o método.
Exemplo
Descrição
Por exemplo, na classe seguinte, quaisquer avisos encontrados na declaração de anonymousMethod, deve ser elevado contra Method1 and not Method2.
Código
Imports System
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
using System;
delegate void Delegate();
class Class1
{
void Method1()
{
Delegate anonymousMethod = delegate()
{
Console.WriteLine("");
};
Method2(anonymousMethod);
}
void Method2(Delegate anonymousMethod)
{
anonymousMethod();
}
}
embutido métodos anônimo
Avisos e métricas para um método anônimo declarado sistema autônomo um embutido atribuição a um campo estão associados com o construtor.Se o campo for declarado sistema autônomo static (Shared em Visual Basic), em seguida, sistema autônomo avisos e métricas estão associadas com o construtor da classe; caso contrário, são associados com o construtor de instância.
Exemplo
Descrição
Por exemplo, na classe seguinte, quaisquer avisos encontrados na declaração de anonymousMethod1, será gerado com o construtor padrão gerada implicitamente de Classe.Enquanto os encontrados em anonymousMethod2, serão aplicadas com o construtor da classe gerada implicitamente.
Código
Imports System
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
using System;
namespace Sample
{
delegate void Delegate();
class Class2
{
Delegate anonymousMethod1 = delegate()
{
Console.WriteLine("");
};
static Delegate anonymousMethod2 = delegate()
{
Console.WriteLine("");
};
void Method()
{
anonymousMethod1();
anonymousMethod2();
}
}
}
Uma classe pode conter um método anônimo embutidos que atribui um valor a um campo que tem vários construtores.Nesse caso, métricas e avisos estão associadas a todos os construtores, a menos que esse construtor encadeia para outro construtor na mesma classe.
Exemplo
Descrição
Por exemplo, na classe seguinte, quaisquer avisos encontrados na declaração de anonymousMethod, deve ser elevado contra Class(int) and Class(String), mas não contra Class().
Código
Imports System
Delegate Function ADelegate(ByVal value As Integer) As Boolean
Class AClass
Dim anonymousMethod As ADelegate = Function(ByVal value As Integer) value > 5
Sub New()
End Sub
Sub New(ByVal a As Integer)
End Sub
Sub New(ByVal a As String)
End Sub
End Class
using System;
delegate void Delegate();
class Class
{
Delegate anonymousMethod = delegate()
{
Console.WriteLine("");
};
Class()
: this((string)null)
{
}
Class(int a)
{
}
Class(string a)
{
}
}
Mesmo que isso pode parecer inesperado, isso ocorre porque o compilador gera um método exclusivo de cada construtor não cadeia para outro construtor.Por causa desse comportamento, qualquer violação que ocorre dentro de anonymousMethod, deve ser suprimida separadamente.Isso também significa que, se um novo construtor é introduzida, avisos anteriormente foram suprimidos contra classe(int) and classe(String) também deve ser suprimida contra o construtor new.
Você pode contornar esse problema em uma destas duas maneiras.Você poderia declarar anonymousMethod em um construtor comum que todos os construtores de cadeia.Ou você pode declará-lo em um método de inicialização que é chamado por todos os construtores.