En pocas palabras, los atributos son información adicional relacionada con elementos como clases, estructuras y métodos, y son extensiones de la metainformación. A través de Attribute, se puede mejorar la función del programa e incluso el propio idioma.
El atributo es un componente gramatical único en C #. Puede actuar sobre varios elementos del lenguaje, como espacios de nombres, clases, métodos, campos, atributos, indexadores, etc., y se puede adjuntar alguna información de declaración específica. Los atributos y los metadatos se almacenan juntos en el ensamblado, y el compilador u otros programas pueden leer y usar esta información.
Algunos Atributos se han definido en el sistema para representar diferentes Atributos, y los usuarios también pueden definir Atributos por sí mismos. Todas las clases de atributos son subclases directas o indirectas de System.Attribute y sus nombres terminan con Attribute. La forma general de usar Atributo en un programa es la siguiente:
agregue corchetes superiores ( []
) delante de los elementos del programa relacionados (como clases y métodos en clases ), y especifique el tipo de Atributo entre corchetes y los Parámetros de Atributo transportados.
A System.ObsoleteAttribute
modo de ejemplo, se utiliza delante de varios elementos del programa para marcar que este elemento está obsoleto u obsoleto y no debe utilizarse en la nueva versión.
[Obsolete("Div已废弃, 请改用Div2")]
public static int Div(int a, int b) {
... }
Indica que el método Div está desactualizado. Si se llama a este método, se emitirá un mensaje de advertencia durante la compilación. La información específica se indica mediante una cadena en los parámetros de Obsolete.
Más ejemplos:
using System;
using System.Reflection;
namespace ConsoleApp10Attribute
{
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Method,
AllowMultiple = true)]
public class HelpAttribute : System.Attribute
{
public readonly string Url;
public string Topic {
get => topic; set => topic = value; }
private string topic;
public HelpAttribute(string url) {
this.Url = url;
}
}
[HelpAttribute("https://msvc/MyClassInfo", Topic = "Test"),
Help("https://my.com/about/class")]
class MyClass
{
[Help("http://my.com/about/method")]
public void MyMethod(int i) {
return;
}
}
class MemberInfo_GetCustomAttributes
{
static void Main(string[] args) {
Console.WriteLine("Hello World!");
Type myType = typeof(MyClass);
object[] attributes = myType.GetCustomAttributes(false);
for (int i = 0; i < attributes.Length; i++) {
PrintAttributeInfo(attributes[i]);
}
MemberInfo[] myMembers = myType.GetMembers();
for (int i = 0; i < myMembers.Length; i++) {
Console.WriteLine("\nNumber {0}: ", myMembers[i]);
Object[] myAttributes = myMembers[i].GetCustomAttributes(false);
for (int j = 0; j < myAttributes.Length; j++) {
PrintAttributeInfo(myAttributes[j]);
}
}
}
static void PrintAttributeInfo(object attr) {
if (attr is HelpAttribute) {
HelpAttribute attrh = (HelpAttribute)attr;
Console.WriteLine("----Url: " + attrh.Url + " Topic: " + attrh.Topic);
}
}
}
}