複数のクラスに静的メソッドを定義し、定義した静的メソッドへポリモルフィックにアクセスしたいと思っています。
しかし、スーパークラスにvirtualメソッドを定義する場合も、interfaceを使用する場合でもコンパイルエラーとなります。
言語仕様ということで納得はしたのですが、皆さんこのような場合にどのような実装をしているのでしょうか。
具体的には、ジェネリッククラスを定義し、初期化の際に渡された型から型固有のパラメータを取得したいと考えています。
場合によっては T のインスタンスを作成しない場合があり、そのときでも型固有のパラメータは参照したいのです。
無視やりだったら、ダミーインスタンスを1個作ってやって、そのインスタンスメソッドにアクセスしても事は足りるのですが・・・
よろしくお願いします。
静的メソッドにポリモルフィックにアクセスすることはできません。
なぜならば静的メソッドはインスタンスではなくクラスから呼び出されるため、「インスタンスの型(クラス)によって呼び出すメソッド内容を変える」という動きは必然的にできないからです。
私には、後半で言っている意味が正しく理解できていないかもしれませんが、以下のようなことがやりたいのでしょうか?
// ジェネリッククラスを定義し、初期化の際に渡された型から型固有のパラメータを取得 var myIntObject = new MyClass<int>(); Console.WriteLine(myIntObject.GetMyParamaer()); var myStringObject = new MyClass<string>(); Console.WriteLine(myStringObject.GetMyParamaer()); // T のインスタンスを作成しないで、型固有のパラメータを参照 Console.WriteLine(MyClass<int>.GetParameterFromType()); Console.WriteLine(MyClass<string>.GetParameterFromType()); // 型固有のパラメータを取得するジェネリッククラス public class MyClass<T> { public string GetMyParamaer() { return MyClass<T>.GetParameterFromType(); } public static string GetParameterFromType() { return (typeof(T) == typeof(string)) ? "string-type-param" : "other-type-param"; } }