2009-03-07 1 views
2

ここでは、どのように動作するのかわからないコードがあります。ジェネリックスを使用していることはわかっていますが、where句の「新」は何を意味していますか?ジェネリックスの構文

また、LoadMediaの方法ではTの使用方法もわかりません。 Tはクラス内のどこでも参照できますか?

答えて

7

ここでは、どのように動作しているか分かりません。ジェネリックスを使用していることはわかっていますが、where句の「新」は何を意味していますか?

where節のnew()は、Tがインスタンス化できる型でなければならないことを意味します。 Tにパラメータなしのコンストラクタがない場合、Tは型パラメータとしてこのクラスに渡す有効な型ではありません。

http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspxを参照してください。

また、LoadMediaの方法でTの使い方は分かりませんが、 Tはクラス内のどこでも参照できますか?

はい。 Tはクラスの型パラメータであるため、クラス全体がそれを知っています。また、T型のクラス内にフィールドを持つことも有効です。たとえば、Tを返したメソッドもあります。

1

new()は、Tにパラメータのないコンストラクタが必要であることを意味します。 (この場合、Mediaクラスも継承する必要があります)

0

Tは、このクラスがインスタンス化されるときに使用される特定の型です。あなたは

MediaPresenter<Media> myMediaPresenter = new MediaPresenter<Media>(); 

を宣言した場合たとえば、その後、Tは、メディアになると、我々は上記のクラスを宣言したときので、あなたがについて問い合わせるラインは

Media media = new Media(); 

のようなものの中に、実行時に翻訳さになるだろうジェネリック型の引数をMediaと同じにしました。

希望があれば

関連する問題