タイプセーフな列挙型パターンをジェネリッククラスに実装するにはどうすればよいですか?これらの線に沿って実装されていると仮定しましょう
public class KnownSetting<T>
{
public readonly static KnownSetting<String> Name = new KnownSetting<String>("name", "Default Name", t => t);
public readonly static KnownSetting<int> Size = new KnownSetting<String>("size", "25", t => Converter.ToInt32);
public String Key { get; set; }
public T DefaultValue { get; set; }
public Func<String, T> Converter { get; set; }
private KnownSetting(String key, T defaultValue, Func<String, T> converter)
{
Key = key;
DefaultValue = defaultValue;
Converter = converter;
}
}
コンストラクターはプライベートのままなので、パターンの実装はこのように正しいですが、このコンストラクトを使用すると、間違って見えます。
public static class Program
{
public static void main()
{
var x = KnownSetting<?>.Name;
}
}
次に、KnownSettingコンテナクラスとSetting実装の2つに分割するオプションがありますが、コンストラクタのスコープをプライベートにして、コンテナ内からインスタンス化することはできません。
このパターンを実装して、そのジェネリックの側面をエンドユーザーから隠しておきながら、強く型付けされたままにする方法を教えてください。より適切なパターンがありますか、それともそれを実装するためのより良い方法がありますか?
更新 設定のタイプを一般的なものにしたいことを示すために、2番目のサンプルを追加しました。