1. Visão Geral
Os atributos são essencialmente um meio de adicionar informações adicionais ao código e podem ser aplicados a classes, structs, métodos, construtores e muito mais. Em C#, atributos são classes que herdam Attribute
de uma classe base . Todas as classes herdadas Attribute
podem ser usadas para adicionar informações adicionais ao código.
2. Use características
Por exemplo, há uma ObsoleteAttribute
propriedade chamada . É usado para indicar que o código está obsoleto e não é mais usado. Este atributo pode ser aplicado a uma classe ou outra usando colchetes.
[Obsolete]
public class TestClass
{
}
Embora o nome dessa classe de atributo seja ObsoleteAttribute
, ele só precisa ser usado no código Obsolete
. Esta é uma convenção de C#. Embora o nome completo também possa ser usado ObsoleteAttribute
.
Marcar uma classe como obsoleta também pode adicionar algum esclarecimento adicional ao passar um parâmetro para o atributo Obsoleto, somente bool, int, double, string, Type, enums, etc
arrays desses tipos podem ser passados. Expressões ou variáveis não podem ser usadas.
[Obsolete("TestClass已经过时,请使用NewTestClass")]
public class TestClass
{
}
3. Recursos personalizados
Atributos customizados só precisam deixar uma classe herdar a classe Attribute e o sufixo do nome é o final de Attribute.
class MsgAttribute : Attribute
{
private string msg;
public MyAttribute(string msg)
{
this.msg = msg;
}
public void ShowMsg()
{
Console.WriteLine(msg);
}
}
[Msg("这是一条信息")]
class MyClass
{
}
4. Leia as informações do recurso
As propriedades são usadas apenas para identificação. Os traços são realmente inúteis sem a ajuda de alguma força externa.
Para usar atributos, você geralmente precisa usar reflexão. Por exemplo, você pode usar reflexão para obter informações sobre uma classe.
TypeInfo typeInfo = typeof(MyClass).GetTypeInfo();//获取类型信息
MsgAttribute customAttribute = typeInfo.GetCustomAttribute<MsgAttribute>(); //获取特性信息,返回特性的实例对象
customAttribute.GetName();//调用方法 控制台中输出 这是一条信息
O método genérico GetCustomAttribute<T> é usado para obter um recurso específico, retorna a instância do recurso e há um método GetCustomAttributes() para obter todos os recursos.
Os atributos são instanciados apenas se forem usados GetCustomAttribute
ou GetCustomAttributes
E cada chamada será reinstanciada e retornará uma instância de atributo diferente.
5. Resumo
Os atributos podem fornecer recursos declarativos, mas são códigos na forma de metadados e não executam operações por conta própria.