2

私は何を知ってConditionalAttributeいます。

ドキュメントは、それがから派生している場合、クラスにも適用できると言いますAttribute:

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

しかし、そのカスタム属性はどのように動作するのでしょうか? (リリースビルドから削除されていますか?)

4

1 に答える 1

2

@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たが、封印されています。代わりに、カスタム属性を装飾する必要があります。

于 2016-08-17T07:16:11.567 に答える