PER-FILE /プロジェクト項目ごとにコンパイラ定数を定義することはできますか?PER-FILEベースのC#コンパイラ定数?
背景: すべての読み書きタスクを分離し、両方を実行できるDALを保持していますが、同じメソッドを複数回実装する必要はありません。サポートされているデータベースタイプごとに1インスタンスクラスになります)。
だから私はこのように私のDALを分けたい:C#は多重継承をサポートしていないため、動作しないこと、残念ながら
abstract class ReadDAL
abstract class WriteDAL
abstract class ReadWriteDAL (multiple-inheritance from Read&Write-DAL).
。
だから、この問題を回避する一つの方法は、インタフェースを定義することによって、次のようになります。
abstract class ReadDAL : IReadDAL
abstract class WriteDAL : IWriteDAL
abstract class ReadWriteDAL : IReadDAL, IWriteDAL
私はこれを行う場合は、私はインターフェイス定義私はDALSの一つに方法を変更するたびに変更する必要がありますReadWriteDALで定義されているメソッドを変更すると、メソッド実装のどこかにコピー・ペーストする必要があります。つまり、DRY非準拠の混乱が生じます。
は、私は、同じファイルにリンクとしての第2の時間を加算し、プロジェクトごとの項目ごとに定義持っていた私は何ができるかを考え出し:
#if SOMECONSTANT // true if file is PartialReadDAL.cs
public partial abstract class ReadDAL
#else // false if "file" is link called "PartialReadWriteDAL.cs" symlinking to PartialReadDAL.cs
public partial abstract class ReadWriteDAL
#endif
and here some implementation.
しかし、私は何とかコンパイラ定数あたりを定義することができますファイル?
または、同様の効果が得られますか?
メソッドをインターフェイス上の拡張メソッドとして実装できますか? –
@Lucas Trzesniewski:まず、私は拡張メソッドを望んでいません。二番目のおそらく、私がしたい場合でも。 –
アイデア: 'ReadDAL'と' WriteDAL'(インスタンスがコンストラクタに渡されるか、適切なデフォルトが仮定される)への転送メソッドを生成するT4テンプレートから 'ReadWriteDAL'を生成します。本質的に、 'ReadWriteDAL'には興味深いコードは含まれていないので、おそらくコンピュータで書き込むことができます。コード生成を伴わない別の考え方は、 'ReadWriteDAL'暗黙の変換演算子に'(I)ReadDAL'と '(I)WriteDAL'に適切なインスタンスを返すだけです。これは本物のものとまったく同じくらい良いとは言えませんが、それは近いです。どちらの考えも構図に依存しています。 –