Red de conocimiento de abogados - Derecho de sociedades - Cómo utilizar el atributo C#

Cómo utilizar el atributo C#

Supongamos que su método F() está definido en la siguiente clase:

clase pública MiClase

{

[IStudent( Nombre = "abc", Edad = 20)]

public void F()

{

}

}

Entonces puedes obtener el valor de esta manera:

Type type = typeof(MyClass);

MethodInfo MethodInfo = type.GetMethod("F");

if (methodInfo.IsDefined(typeof(IStudentAttribute), false))

{

objetos[] atributos = métodoInfo.GetCustomAttributes(typeof(IStudentAttribute), false);

p>

IStudentAttribute StudentAttr = (IStudentAttribute)atributos[0];

Console.WriteLine(studentAttr.Name StudentAttr.Edad); p>

De hecho, Attribute se puede utilizar para muchos propósitos. Por ejemplo, puede marcar un método para ver si tiene permiso para llamarlo o marcar una propiedad para ver cómo verificarlo.

Por ejemplo (estoy muy acostumbrado a usar la palabra clave var, y todos los siguientes códigos usan var, así como Linq):

Supongamos que tenemos una marca de este tipo para indicar los permisos de la operación:

// lt; resumengt;

/// Etiqueta para declarar permisos

/// lt;/summarygt;

[UsoDeAtributos (AttributeTargets.Method)]

clase pública PermissonAttribute: Atributo

{

cadena pública Rol { set }

public; PermissonAttribute(rol de cadena)

{

this.Role = rol

}

public PermissonAttribute()

{

}

}

Existe una clase de operación que aplica esta etiqueta:

/// resumengt;

/// Clase de operación de archivo

/// lt;/summarygt;

clase pública FileOperations

{

/// lt ;summarygt;

/// Cualquiera puede llamar a Leer

/// lt;/summarygt;

[Permisson(" Cualquiera")]

public void Read()

{

}

/// lt; resumengt;

// / Sólo el propietario del archivo puede escribir

/// lt;/summarygt;

[Permisson("Owner")]

public void Write()

{

}

}

Luego escribimos una clase de herramienta para verificar los permisos de operación

/// lt;summarygt;

/// Clase de herramienta para llamar a operaciones

/// lt;/summarygt;

clase pública estática OperationInvoker

{

public static void Invoke(objeto objetivo, función de cadena, nombre de operación de cadena, parámetros de objeto[])

{

var tipo de destino = objetivo

et.GetType();

var métodoInfo = targetType.GetMethod(operaciónNombre);

if (methodInfo.IsDefined(typeof(PermissonAttribute), false))

{

// Leer todas las etiquetas relacionadas con permisos

var permissons = MethodInfo

.GetCustomAttributes(typeof(PermissonAttribute), false)

.OfTypelt;PermissonAttributegt;();

// Si hay permisos suficientes

if (permissons.Any(p =gt; p.Role == rol ))

{

métodoInfo.Invoke(objetivo, parámetros);

}

más

{

throw new Exception(string.Format("¡El rol {0} no tiene permiso para acceder a la operación {1}!", rol, nombreOperación)); p> }

}

}

Finalmente, al usar:

var role = "Cualquiera";

var opertion = new FileOperations();

//Read se puede llamar normalmente

OperationInvoker.Invoke(operación, "Read", null);

// Pero no se puede llamar a Write

OperationInvoker.Invoke(operation, "Write", null);