代码之家  ›  专栏  ›  技术社区  ›  Jason

属性能否发现它在运行时应用于什么方法?

  •  1
  • Jason  · 技术社区  · 16 年前

    对于已经应用到方法的属性,有没有一种方法可以知道它在运行时应用到了什么方法?

    [AttributeUsage(AttributeTargets.Method)]
    public class CustomAttribute : Attribute {}
    
    public class Foo
    {
        [Custom]
        public void Method() {}
    }
    

    然后我在运行时查询属性

    var attribute = typeof(Foo)
        .GetMethod("Method")
        .GetCustomAttributes(false)
        .OfType<CustomAttribute>()
        .First();
    

    “attribute”是否可以说明它已应用于“foo”类的“method”方法?

    2 回复  |  直到 16 年前
        1
  •  0
  •   KeithS    16 年前

    不是内置的。如果一个属性包含的方法逻辑需要知道它在修饰什么,那么该方法应该采用memberinfo参数(或者更派生的类型,如methodinfo、propertyinfo、fieldinfo等),或者直接传递实例的对象。然后,在对属性调用逻辑时,可以给它提供实例或适当的元数据类,控制代码首先从中获取该实例或元数据类。

        2
  •  5
  •   user180326    16 年前

    我不相信,但如果可以的话,那就没有帮助了。

    我会解释的。

    只有在查询属性后才会创建它们。如果只打开一个dll,则不会创建您添加的任何属性。首先,您必须获得一个指向属性所适用对象的指针,然后,一旦您请求它的属性,.NET框架将为您创建这些属性。因此,当它们被实例化并且您的代码开始对它们进行评估时, 已经知道 它们适用于什么。

    正因为如此,我相信值得赞扬的是,不要在属性本身中添加太多的魔力。