Настраиваемый атрибут - установка использования атрибута только для частных членов - PullRequest
4 голосов
/ 21 декабря 2010

Я создаю пользовательский атрибут , и я хотел бы установить AttributeUsage (или, может быть, какой-то другой атрибут в классе атрибутов), чтобы мой атрибут мог использоваться только в приватметоды , это возможно?

Заранее спасибо за ответы!

1 Ответ

3 голосов
/ 21 декабря 2010

В C# (as of 4.0) нет такой функции, которая позволяла бы ограничивать использование attribute в зависимости от доступности участника.

Вопрос будет в том, почему вы хотите это сделать?

Поскольку указан атрибут ниже,

[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
sealed class MethodTestAttribute : Attribute
{
    public MethodTestAttribute()
    { }
}

и ниже класса,

public class MyClass
{
    [MethodTest]
    private void PrivateMethod()
    { }

    [MethodTest]
    protected void ProtectedMethod()
    { }

    [MethodTest]
    public void PublicMethod()
    { }
}

Вы можете легко получить атрибуты приватных методов, используя следующий код:

var attributes = typeof(MyClass).GetMethods().
                 Where(m => m.IsPrivate).
                 SelectMany(m => m.GetCustomAttributes(typeof(MethodTestAttribute), false));
...