2015-01-24 3 views
0

Я хочу знать, есть ли способ ограничить использование настраиваемого атрибута конкретному классу. Я читал об этом, и кто-то писал, что это, вероятно, невозможно в C#. Но я просто попытался использовать AttributeUsage атрибут класса, который не derrive из атрибутов и Visual Studio бросил следующую ошибку:Ограничение атрибута для определенного класса

Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute

Так что теперь я думаю, что есть довольно умный способ сделать это. У вас есть идеи?

+0

Вы хотите нарушения данного правила, что этот атрибут используется только на некоторых классах, чтобы показать во время компиляции ? Если вы согласны с тем, что нарушение было обнаружено и отмечено во время выполнения, вы можете сделать это с отражением. – RenniePet

ответ

2

Единственный способ, которым я могу думать, - сделать класс атрибута внутренним классом цели. Мне трудно найти законную причину, чтобы использовать это.

будет скомпилирован:

[InnerAttribute] 
public class A 
{ 
    private class InnerAttribute : Attribute 
    { 

    } 
} 

Но добавление этого не будет:

[InnerAttribute] 
public class B 
{ 

} 
+0

Это хорошая идея, но я ищу более компактное решение, если это возможно. – vdrake6

+0

Вау ... Я был в «невозможно во время компиляции» ... @ vdrake6 Что значит «более компактный»? –

Смежные вопросы