C# 属性能否发现它在运行时应用于哪个方法?

C# 属性能否发现它在运行时应用于哪个方法?,c#,.net,attributes,metadata,C#,.net,Attributes,Metadata,是否有一种方法可以让已应用于方法的属性知道它在运行时应用于哪个方法 [AttributeUsage(AttributeTargets.Method)] public class CustomAttribute : Attribute {} public class Foo { [Custom] public void Method() {} } 然后在运行时查询该属性 var attribute = typeof(Foo) .GetMethod("Method")

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

[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();
var属性=typeof(Foo)
.GetMethod(“方法”)
.GetCustomAttributes(false)
第()类
.First();

“attribute”能告诉我们它是应用于“Foo”类上的“Method”方法吗?

不是以内置方式。如果属性包含需要了解其修饰内容的方法逻辑,则该方法应采用MemberInfo参数(或更派生的类型,如MethodInfo、PropertyInfo、FieldInfo等),或者直接传递实例时采用对象。然后,当调用属性上的逻辑时,可以给它实例或适当的元数据类,控制代码首先从中获取它。

不是以内置方式。如果属性包含需要了解其修饰内容的方法逻辑,则该方法应采用MemberInfo参数(或更派生的类型,如MethodInfo、PropertyInfo、FieldInfo等),或者直接传递实例时采用对象。然后,当调用属性上的逻辑时,可以给它一个实例或适当的元数据类,控制代码首先从中获取它。

我认为没有,但如果可以,那就没有帮助了

我会解释的

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


因此,我认为建议不要在属性本身中添加太多魔法

我认为没有,但如果可以的话,那就没有什么帮助了

我会解释的

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


因此,我认为建议不要在属性本身中添加太多魔法

在本例中,我使用该属性创建友好名称。我想它默认为它的全名,如果一个还没有提供。(例如方法名是友好名称)。在本例中,我使用属性创建友好名称。我想它默认为它的全名,如果一个还没有提供。(例如方法名是友好名称)。我在属性上创建了第二个属性,并将其设置为方法名。然后在属性内部,我执行一些逻辑来使用正确的属性值。用户设置的或代码设置的。我希望不必设置额外的属性。我在属性上创建了第二个属性,并将其设置为方法的名称。然后在属性内部,我执行一些逻辑来使用正确的属性值。用户设置的或代码设置的。我希望不必设置额外的属性,我计划使用属性为方法设置一个友好的名称,如果没有提供,则默认返回全名。这是作为授权方案的一部分使用的,在授权方案中,名称将在数据库中查找。我计划使用该属性为方法设置一个友好的名称,如果没有提供,则默认返回全名。这是作为授权方案的一部分使用的,在授权方案中,将在数据库中查找名称。