2009-09-11 4 views
11

クラスの条件付き属性を使用したいのですが、それ以上のポイントには、その効果を与えるものがありますか?基本的には、クラスをデバッグモードにしたくないです。また、それぞれの呼び出しを#if DEBUGディレクティブでラップする必要もありません。クラスレベルにConditional属性がありますか?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 

namespace NameSpace 
{ 
    [Conditional("Debug")] 
    public class ClassName 
    { 

     public ClassName() 
     { 
     } 
    } 
} 

答えて

10

いいえ、ありません。条件付き属性ではターゲットが消えません。ターゲットのユーザーをコンパイラーに省略させるだけです。

Eric Lippertさんは今日、post on just this sort of thingでした。それを読んで、それがあなたにとってもっと理にかなっているかどうかを見てください。

実際にには、リリースモードでクラス自体を省略する必要がある場合は、プリプロセッサディレクティブを使用してください。ただし、すべての呼び出し元についても同様に行う必要があります。とにかく、リリースモードでクラスを守らなければならないとどんな害がありますか?

これは実際には別のプロジェクトのクラスですか?その場合は、、次にというように、すべてのメソッドに条件属性を適用するだけで、リリースモードではタイプが不要になるため、アセンブリの出荷を避けることができます。

+1

クラスのすべてのユーザーを省略することはできますか? –

+1

クラスのすべての*メソッド*にConditionalを設定すると、すべての呼び出しは削除されますが、クラス自体は引き続きビルドされます。 –

+0

したがって、クラスのインスタンスはまだ作成され、メモリを使用しますか? –

0

私はこれについて正しく理解していればわかりません。

ただし、すべてのメソッドをConditionalAttributeで飾ると、シンボルが存在しない場合はすべて削除されます。したがって、クラスは使用可能ですが、実行時にクラスを使用するメソッドはありません。

私は、シンボルに応じてクラスを除外したいのはなぜでしょうか? シナリオを説明できますか?

関連する問題