3

コンストラクターのみでクラスのジェネリック型(T)を設定する方法はありますが、宣言では設定しませんか?

public class Gen<T>
{
}

public class Da
{
}

public class Program
{
    public static Gen<?> gen;

    public static void Main(string[] args)
    {
        gen = new Gen<Da>();
    }
}
4

2 に答える 2

7

私があなたの要件を正しく理解している場合、これを達成するための最も簡単な方法は、非ジェネリックインターフェイスを使用することです。

interface IGen { }

次に、ジェネリッククラスは次のようになります。

class Gen<T> : IGen { }

そして使用法は次のとおりです。

IGen objectGen = new Gen<object>();
IGen intGent = new Gen<int>();
于 2012-07-04T12:41:44.473 に答える
3

objectはい。ただし、ジェネリック以外の基本クラスやジェネリッククラスが実装するインターフェイスなど、ジェネリック以外の変数を使用する場合のみです。

public interface Intf {
  void DoSomething();
}

public class Gen<T>: Intf {
  public void DoSomething() {
    // can use the generic stuff here
  }
}

public class Da {

}

public class Program {
    public static Intf gen;
    public static void Main(string[] args) {
        gen = new Gen<Da>();
        gen.DoSomething();
    }
}
于 2012-07-04T12:38:46.857 に答える