全然大丈夫です。ジェネリックなしでも同様のことができます:
class Test
{
public static Test GetInstance()
{
return new Test();
}
}
ここには自己参照はありません。そして実際には、シングルトンを実装するときなど、非常に便利なパターンです。単純化された概念(ロックなどを使用する必要があることはわかっています...):
public static class Singleton<T> where T : new()
{
private static T _instance;
public static T GetInstance()
{
return _instance ?? (_instance = new T());
}
}
編集 - コメントの質問に答える:
X<T>
すべての適切なパラメーターに対して既に存在します。T
適切とは、一般的な制約に適合するすべての型 (または、制約がない場合はすべての型) を意味します。そして、すべてとは、アセンブリ内で利用可能なすべてのクラスだけを意味するわけではありません。適切なすべてのタイプ。
ジェネリック クラス/メソッドは、実行時に特定のジェネリック型に対して解決される単なるテンプレートです。そのため、宣言されているアセンブルでジェネリック クラスを使用する必要さえありません。これが、コードが正常に機能する理由です。