1

私は持っている

class X<T> : Base
{
//For exemple:
    static T something();
}

そして、私は持つことができます

class A : X <A> 
{
}

論理的には次のようになります。

class A : Base
{
    static A something();
}

これは機能し、うまく機能します。

しかし、私の理解では、それは一種の自己参照 (A は X の子であり、X は A の前には存在しません...) であり、コンピューター サイエンスの基盤を壊しているので、私の何が問題なのか知りたいです。理解??

4

1 に答える 1

3

全然大丈夫です。ジェネリックなしでも同様のことができます:

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適切とは、一般的な制約に適合するすべての型 (または、制約がない場合はすべての型) を意味します。そして、すべてとは、アセンブリ内で利用可能なすべてのクラスだけを意味するわけではありません。適切なすべてのタイプ。

ジェネリック クラス/メソッドは、実行時に特定のジェネリック型に対して解決される単なるテンプレートです。そのため、宣言されているアセンブルでジェネリック クラスを使用する必要さえありません。これが、コードが正常に機能する理由です。

于 2013-09-06T20:40:50.753 に答える