2009-03-07 13 views
2

Hier ist ein Code, den ich nicht zu verstehen scheinen, wie es funktioniert. Ich weiß, dass es Generika verwendet, aber was bedeutet das "neue" in der where-Klausel?Generics Syntax

Ich verstehe auch nicht in der LoadMedia-Methode, wie das T verwendet wird? Kann das T irgendwo in der Klasse referenziert werden?

Antwort

7

Hier ist ein Code, den ich nicht zu verstehen scheinen, wie es funktioniert. Ich weiß, dass es Generika verwendet, aber was bedeutet das "neue" in der where-Klausel?

Die neue() in der where-Klausel bedeutet, dass T von einem Typ sein muss, der instanziiert werden kann. Wenn T keinen parameterlosen Konstruktor hat, ist T kein gültiger Typ, der als Typparameter an diese Klasse übergeben wird.

Siehe http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx.

Ich verstehe auch nicht in der LoadMedia-Methode, wie das T verwendet wird? Kann das T irgendwo in der Klasse referenziert werden?

Ja. T ist ein Typparameter der Klasse, also weiß die ganze Klasse davon. Es wäre auch gültig, ein Feld in der Klasse zu haben, die vom Typ T war, oder eine Methode, die zum Beispiel T zurückgab.

1

new() bedeutet, dass T einen parameterlosen Konstruktor haben muss. (In diesem Fall muss es auch die Media-Klasse erben)

0

T ist der spezifische Typ, der verwendet wird, wenn diese Klasse instanziiert wird. Zum Beispiel sind, wenn Sie

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

Dann wird das T Medien und die Linie werden Sie während der Laufzeit in etwas übersetzt bekommen würden verhören erklären, wie

Media media = new Media(); 

, denn wenn wir die Klasse oben angegebenen Wir haben das Argument für den generischen Typ auf "Media" gesetzt.

Hoffe, dass hilft