2009-07-22 29 views
3

頻度の変換クラスを作成していて、チームが必要なときに追加のコンバージョンを追加できるようにしたいと考えました。変換クラスの拡張性(拡張メソッドとParitalクラス)

Frequency myFrequency = new Frequency(100, MHz); 
double value = myFrequency.InKhz(); 

クラスのソースコードは、将来のプロジェクトに含めることはありませんので、私はクラスは部分クラスであるか、または追加の変換が拡張する必要があります持っている必要がありますどちらか。例を挙げると、GHzへの変換が追加されます

myFrequency.InGHz() 

これを進める最良の方法はどれですか?

更新:Randolphoの答えを読んだ後、私は拡張メソッドのアプローチを行っています。拡張機能は時間が許せばベースコードにロールインされますが、他のチームメンバーが更新されたアセンブリを待つのを待たずに、次のタスクに少し早く移行することができます。

答えて

3

元のソースがない限り、部分クラスは機能しません。開発者のソースへのアクセスを拒否している場合は、唯一の方法は拡張メソッドを使用することです。

つまり、おそらく、新しい追加機能でライブラリを更新するプロセスが必要になるだけです。彼らはまれであるように見えます。

+1

ありがとうございました。私が記述した方法で部分クラスを使用しようとしたことは一度もありませんでした。 –

1

拡張メソッドはすべてです。これはあなたを制限するものではなく、部分メソッドはアセンブリ内でのみ使用でき、拡張メソッドはどこでも宣言できます。

+0

それは私が考えていたものですが、私の同僚のいくつかの拡張メソッドは "悪"です。 –

+0

拡張メソッドは長いショットで悪くはありませんが、それがあなたの問題をすべて解決する必要はありません。 – Randolpho

+0

拡張メソッドは、静的メソッドを自動的に既に作成されたオブジェクトにマップするコンパイラ/構文マジックです。拡張メソッドは、通常のメソッドを置き換えるようなものには使用しすぎてはいけません。しかし、もはや変更できないオブジェクトの機能を拡張するためにそれらを使用する必要があります。 –

0

コンパイルせずに拡張可能にしたい場合は、おそらく別の変換クラスを作成する必要があります。これにより、実行時にコンバージョンを指定して辞書に保存することができますが、残念ながら、入力したものと同じ「組み込みの」言語感はありません。

それ以外の場合は、おそらく拡張オプションが最適です。ただし、新しいコンバージョンを追加する場合はいつでも、再コンパイル+新しいライブラリが必要になります。