私は静的クラスは継承も実装もできないことを知っています。質問は "これは何を右C#+ OOPのパターンはこれを実装する"ですか?静的クラスでポリモーフィズムまたは継承を使用するにはどうすればよいですか?
静的でなければならないクラスのグループに対して定義と実装の両方の共通セットを定義したいと思います。つまり、私は、それぞれがまったく同じ4人のメンバーを持っているいくつかの任意のベース・コンバータを作りたい:
// Theoritical; static classes can't actually implement
interface IBaseConverter {
int Base { get; }
char[] Glyphs { get; }
int ToInt(string value);
string FromInt(int value);
}
// AND/OR (interface may be superfluous)
public class BaseConverter : IBaseConverter{
public BaseConverter(int Base, char[] Glyphs) {
this.Base = Base;
this.Glyphs = Glyphs;
}
public int Base { get; private set; }
public char[] Glyphs { get; private set;}
public int ToInt(string value) { // shared logic...
public string FromInt(int value) { // shared logic...
}
彼らはまた、Base
の値とグリフの順序付けられた集合に基づいて正確に同じ実装ロジックを共有することができます。例えば、Base16Converter
は、Base = 16
およびglyphs = { '0', '1', ... 'E', 'F' }
を有する。私はFromInt
とToInt
が自明であると信じています。明らかに私はベース16のコンバータを実装する必要はありませんが、私はを実行する必要がありますは、業界固有のベース36(0
- Z
グリフCode 39)の1つを実装する必要があります。 [Convert]::ToInt32("123",16)
のような組み込みの変換および文字列フォーマット関数の場合と同様に、基本とグリフがあらかじめ決定されている場合は、の静的メソッドであるが強調されています。
私のような、任意のグリフとベースを初期化することができるインスタンスのバージョンを維持したい:
BaseConverter converter = new BaseConverter(7, new[]{ 'P', '!', 'U', '~', 'á', '9', ',' })
int anumber = converter.ToInt("~~!,U") // Equals 8325
しかし、私はまたBase36Code39Converter
ため静的クラスをしたいです。これを置くことのもう一つの方法は、任意のstatic
実装だけでハードコーディングされたベースとグリフを持っていることをされています
// Theoritical; static classes can't inherit
public static class Base36Code39Converter : BaseConverter {
private static char[] _glyphs = { '0', '1', ... 'Z' };
static Base36Code39Converter : base(36, _glyphs) { }
}
これはコンパイラのために働かない理由を私は見ることができます - そこに静的メソッドにはvtableのはありませんし、すべてのこと。私はC#で静的クラスはインターフェイスを実装することはできません(オブジェクト以外)(Why Doesn't C# Allow Static Methods to Implement an Interface?、Why can't I inherit static classes?参照)から継承することはできません。
これは何を意味するのでしょうかはですこれを実装するための「正しい」C#+ OOPパターンですか?
[シングルトンパターン](http://www.dofactory.com/Patterns/PatternSingleton.aspx)の作品ではありませんか?さらに、ここでは[Singleton VS Static Class](http://www.dotnetperls.com/singleton-static)に関する素敵な記事があります。 –