Что делает ConditionalAttribute для атрибута?

Я знаю что ConditionalAttribute делает.

Документы говорят, что это также может быть применено к классу, если он получен из Attribute:

[Conditional("DEBUG")]
public class FooAttribute : Attribute { }

Но как ведет себя этот пользовательский атрибут? (Это вырезано из сборки релиза?)

1 ответ

Решение

Комментарий @RicardoPontual дал мне идею.

Я сделал это:

[Conditional("DEBUG")]
public class FooAttribute : Attribute { }

[Foo]
public class Bar { }

Я скомпилировал в режиме отладки и загрузил DLL в ILSpy (это дизассемблер). Вот что я нашел, как и ожидалось:

[Foo]
public class Bar { }

Затем я скомпилировал в режиме выпуска и загрузил эту DLL в ILSpy. Вот что я нашел:

public class Bar { }

Bar класс не был украшен на этот раз!

Таким образом, ответ заключается в том, что когда вы украшаете некоторый пользовательский атрибут с Conditional то сам атрибут становится таким же условным.

Это поведение, которое я хотел. Я изначально думал, что происходит от ConditionalAttribute, но он запечатан. Вместо этого вам нужно украсить свой собственный атрибут.

Другие вопросы по тегам