2011-07-02 7 views
0

私は自分の名前空間の中にあるプロジェクトのすべてのタイプを保持するC#のソースファイルを持っています。例:タイプが既にC#の別のソースファイルで宣言されているかどうかを知るには?

#define HELPER_FILE 

using System; 

namespace Helper 
{ 
    public struct NormalBalance : INormalType 
    { 
     public int Position { get; set; } 
     public float Normal { get; set; } 
    } 

    ... 

} 

次に、他のファイルでこれらのタイプを使用します。私はチームの他の人にこれらのファイルの一部を配布したいと思いますが、すべてのファイルやタイプは必要ありませんが、いくつかのデータ構造は共有されています。例えば

using System; 

namespace DataPump 
{ 
    public class Pumper 
    { 
     private Helper.NormalBalance[] norm; 

     ... 
    } 

    ... 

} 

しかし、このコードはHelper.NormalBalanceタイプを含む以前のファイルに依存します。私は、型を宣言するファイルで#defineディレクティブを使うことができるC++のような、他のものの存在を知るようにファイルを同期させるメソッドを必要とします。クライアントファイルにトークンが定義されていない場合、次のように条件付きのタイプをコンパイルします:

(C++のコードは以下の)

class Pumper 
    { 

    private: 

#ifndef HELPER_FILE 
     struct NormalBalance 
     { 
      int Position; 
      float Normal; 
     } 

     NormalBalance[] norm; 

#else 

     Helper.NormalBalance[] norm; 

#endif 

     ... 
    } 

    ... 

} 

を残念ながら、C#での#defineディレクティブのスコープは、それが宣言されたファイルのみです。 C#でこれを行う方法はありますか?私は、ファイルがプロジェクトに含まれているかどうか、または少なくとも型が以前に定義されているかどうかを知る必要があります。

答えて

3

.NET Frameworkでは、種類のライブラリを共有する場合は、1つのプロジェクトにパッケージ化することをお勧めします。組み立てると、他のアセンブリと同様に参照できるアセンブリになります。ディレクティブの定義はさまざまな目的で使用され、まれにしか使用されません。 C++開発よりもあまり普及していません。

0

プロジェクトレベルで "条件付きコンパイルシンボル"を定義できます。

しかし、しないでください。ソースをアセンブリに組み込み、すべてのタイプを共有する方がはるかに簡単で便利です。部分をifdefにしようとすると、多くの問題が発生し、インラインでコードの一部を使用する2つのアセンブリを統合すると、部分が交差するとすぐに悪夢になります。あなたはそのような頭痛をあなたには望んでいません。

関連する問題