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>
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: p>
// 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
{ p>
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);