如何强制构造某些自定义属性?

时间:2015-10-23 23:11:01

标签: c# .net

根据here,在调用SELECT SUM( t.cnt ) FROM( SELECT COUNT(pac.strid_paciente) AS cnt FROM tb_paciente AS pac LEFT JOIN tb_entidades AS ent ON pac.strid_entidad = ent.strid_entidad LEFT JOIN tb_escolaridad AS esc ON pac.strid_escolaridad = esc.strID_Escolaridad LEFT JOIN tb_etnia AS etn ON pac.strid_etnia = etn.strID_Etnia LEFT JOIN tb_raza AS raza ON pac.strid_raza = raza.strid_raza LEFT JOIN tb_religion AS rel ON pac.strid_religion = rel.strid_religion LEFT JOIN tb_ocupacion AS ocu ON pac.strOfi_Paciente = ocu.strID_Ocupacion LEFT JOIN tb_consulta AS con ON pac.strid_paciente = con.strid_paciente LEFT JOIN tb_usuarios AS usu ON usu.strid_usuario = con.strid_medico GROUP BY pac.strid_paciente ) AS t 方法之前,属性构造函数不会运行。 这将实例化拥有该类的每个属性。 强制构造某个自定义属性的最有效方法是什么?在修改类时,我只想实例化特定属性,而不是所有属性。

GetCustomAttributes()

2 个答案:

答案 0 :(得分:0)

您误解了属性是什么。属性是元数据,它们作为对象的一种配方存储在程序集中:

  • 使用的属性的构造函数元数据标记
  • 位置参数'值
  • 属性设置器值

那就是它。不多也不少。

当您在成员上调用GetCustomAttributes时,运行时将使用存储在元数据中的配方来实例化此成员的属性,并处理您。

每次调用都会获得一个新实例,因为属性实例只是类,因此可变。这样做可确保您获得真正的元数据。如果您遇到性能问题,请自行缓存,并确保不要更改它们。

答案 1 :(得分:0)

找到答案。 GetCustomAttributes能够按类型获取某些属性。下面的代码不会实例化RegularAttribute。它需要在基本构造函数或Unity DI中的`[InjectionMethod]中调用。

MethodInfo[] methods = (typeof(MyClass)).GetMethods();
foreach (var method in methods)
{
    var attribute = method.GetCustomAttributes(typeof(SpecialAttributeAttribute), false);
}

欢迎更有效的答案。