属性是否可以在运行时发现它应用于哪种方法?

Jas*_*son 1 .net c# attributes metadata

是否有一种方法可以将已应用于方法的属性知道它在运行时应用于哪种方法?

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

public class Foo
{
    [Custom]
    public void Method() {}
}
Run Code Online (Sandbox Code Playgroud)

然后我在运行时查询属性

var attribute = typeof(Foo)
    .GetMethod("Method")
    .GetCustomAttributes(false)
    .OfType<CustomAttribute>()
    .First();
Run Code Online (Sandbox Code Playgroud)

"属性"可以告诉它应用于"Foo"类的"Method"方法吗?

小智 5

我不相信,但如果它可能没有帮助.

我会解释一下.

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

因此,我认为建议不要在属性本身中加入过多的魔力.