投稿者 tel | 2017年8月31日

C#のConditional属性

C#のConditional属性についてのメモ。
https://msdn.microsoft.com/ja-jp/library/aa664622(v=vs.71).aspx

Unityでデバッグ処理を#ifでくくる代わりにConditional属性を関数に付けておくと、リリース時にデバッグ用のシンボルを消すことで処理が呼び出されなくなる。

  • 呼び出し自体がなくなるので引数も評価もされない
  • 関数自体は残る

下の方の挙動がやっかいでデバッグ処理を完全に消そうとして以下のようなコードを書くとコンパイルエラーになる。

public class ConditionalTest : MonoBehaviour
{
    #if DEBUG_LOG
    string debugText = "debug text";
    #endif

    [System.Diagnostics.Conditional("DEBUG_LOG")]
    void Log()
    {
        Debug.Log(debugText);
    }

    void Start()
    {
        Log();
    }
}

関数の中身も#ifでくくっておけばコンパイルが通るが、関数自体が残ってしまうのでアプリサイズとかメモリが無駄になる。

以下のように書けば完全にデバッグ処理が消せるがコードが読みやすくない。

public class ConditionalTest : MonoBehaviour
{
    #if DEBUG_LOG
    string debugText = "debug text";
    #endif

    #if DEBUG_LOG
    void Log()
    {
        Debug.Log(debugText);
    }
    #endif

    void Start()
    {
        #if DEBUG_LOG
        Log();
        #endif
    }
}
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。