このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

プリプロセッサ ディレクティブによる条件付きコンパイル

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows 8

このトピックでは、条件付きコンパイルの概要および Windows Phone 8 と Windows 8 のアプリをビルドするときに条件付きコンパイルを使用する方法について説明します。

このトピックは、次のセクションで構成されています。

条件付きコンパイルは、コードの異なる部分をコンパイルし、他の部分を無視するように指示するコンパイラ ディレクティブを定義するプロセスです複数のプラットフォームにまたがる開発シナリオでこの手法を使用すると、特定のプラットフォームに固有なコンパイルされるコードの部分を指定することができます。

C# で #if…#else…#endif ディレクティブを使用して名前空間を条件付きでインクルードする方法を次の例に示します。


#if CONDITION
using Conditional.Namespace;
#else
using Another.Namespace;
#endif

条件の値によってインクルードする名前空間が決まります。

CONDITION が設定されています

using Conditional.Namespace;

CONDITION が設定されていません

using Another.Namespace;

条件付きコンパイルのシンボルが設定されているかどうかを基にして異なるコードをコンパイルすることによってプログラム フローを変更する方法を次の例に示します。


public double MyMethod(int input)
{
    double result;
 
    #if CONDITION
    result = input * 0.6;
    #else
    result = input * 0.45;
    #endif
 
    return result;
}

条件の値によって機能が決まります。

CONDITION が設定されています

result = input * 0.6;

CONDITION が設定されていません

result = input * 0.45;

他の言語でも類似したディレクティブを使用できます。詳細については、「C# プリプロセッサ ディレクティブ」および「Visual Basic での条件付きコンパイル」を参照してください。

この手法を使用すると、プラットフォームに固有なコードを条件付きコンパイルされるブロック内に分離することができるので、必要なときにいつでもこの手法を使用できます。ただし、これを唯一のコード共有手法として使用する場合は、時間の経過にと共にコード ベースが管理不能になる可能性があります。小さく明確なプラットフォームの違いがコード パス内に存在し、それらの違いを固有のクラス、メソッド、プロジェクト、またはソリューションに分離したくない場合は、この手法が非常に役に立ちます。条件付きコンパイルを使用するコードはポータブル クラス ライブラリで共有できないことに注意してください。これは、ポータブル クラス ライブラリが、一度ビルドしたライブラリを複数の選択したプラットフォームで利用することを目的としているためです。

この方法では非常に簡単にプラットフォーム固有のコードを定義することができ、他のすべてのコードはプラットフォームに依存しなくなります。たとえば、Windows Phone 8 アプリと Windows ストア アプリ用のコード ベースを共有し、プラットフォーム固有のコードを条件で囲むことによって、プラットフォームごとにコード ベースの動作方法を変更することができます。この条件は、コンパイル対象のアプリまたはプラットフォームに応じて設定できます。次の例では、コンパイラ ディレクティブを使用し、PlatformSpecificMethod がプラットフォームごとに異なる方法でコンパイルされるようにします。


namespace ProjectB
{
    public class MyClass
    {
        public void CommonMethodA()
        {
            // code that is common to Windows Phone 8 and Windows 8
        }
 
        public int CommonMethodB()
        {
            int result = 0;
 
            // code that is common to Windows Phone 8 and Windows 8
 
            return result;
        }
 
        public void PlatformSpecificMethod()
        {
            #if NETFX_CORE
            // code for Windows 8
            #else
            // code for Windows Phone 8
            #endif
        }
    }
}

Visual Studio Express 2012 for Windows 8 を使用して作成された Windows 8 プロジェクトには、NETFX_CORE というコンパイラ ディレクティブが既に設定されています。そのため、これを設定した場合、プロジェクトは Windows 8 プロジェクトになります。前のコードで示したように、この事実を使用して PlatformSpecificMethod をコンパイルします。これにより、簡単にコードを共有し、しかもプラットフォーム固有のコードもクラス内で使用できます。

表示:
© 2015 Microsoft