Laden...

Interface mit <T> - was ist das? [Lösung: Generics]

Erstellt von CurdledMilk vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.030 Views
Thema geschlossen
C
CurdledMilk Themenstarter:in
32 Beiträge seit 2009
vor 13 Jahren
Interface mit <T> - was ist das? [Lösung: Generics]

Hallo

Ich habe eine Frage zur Interface Implementierung

Ich sehe folgendes Recht oft -->

public interface IXYZ<ABC>
{
...
}

Ich versteh dieses <ABC> nicht bzw. überhaupt nicht warum man hinter das Interface irgendwas in <...> schreibt. Ich dachte immer das ich das nur benutze, wenn ich einen bestimmten Typ erzwingen will. Das Interface hat ja mit damit nichts am Hut oder? Ich benutze die <...> zur Zeit nur wenn ich z.B. sowas machen will

IEnumerable<string> liste

Das finde ich dann auch logisch. Ich hoffe ihr versteht was ich meine und ich freue mich auf eure Antworten ^^.

S
902 Beiträge seit 2007
vor 13 Jahren

Hallo,

das in den Klammern ist ein Typparameter.
Schau dir mal Generics an. Die Verwendung dieser ist nicht auf Klassen beschränkt, wie du ja selbst in deinem Beispiel gezeigt hast, indem du ein generisches Interface verwendet hast 😉

Aber im endeffekt benutzt man generics bei interfaces für die signaturen gleichermaßen wie bei klassen.

mfg
serial

H
114 Beiträge seit 2007
vor 13 Jahren

Irgendwie lustig, dass du die Verwendung von Generic bei Interfaces hinterfragst, aber bei IEnumerable<string> logisch findest, wo das doch auch nur ein Interface ist 😉

Ansonsten siehe z.B. An Introduction to C# Generics oder Generics – Generische Datentypen

Grtz

C
CurdledMilk Themenstarter:in
32 Beiträge seit 2009
vor 13 Jahren

Ah ok endlich kenn ich ein Wort für <...> das hilft schonmal ungemein bei der Suche 😃

Es ist aber trotz allem relativ schwer zu verstehen finde ich.

Wenn ich ein Interface mit IABC<T> habe und dann davon eine Klasse ableiten lasse, dann muss die auch <T> haben? Die kann es dann z.B. nutzen um zu sagen das eine liste in einer Instanz der Klasse den Typ XYZ haben muss? Nach meinem Verständnis kann ich die beiden Fragen mit ja beantworten 😃.

Zu dem Beispiel von mir das nutze ich wenn ich Parameter nicht festlegen kann / will.

Viele Grüße

PS: Danke auf jeden Fall für die Antworten 😃

F
240 Beiträge seit 2006
vor 13 Jahren

Du kannst den Typenparameter beschränken mit where:


public interface IABC<T> where T: XYZ
{
}

Dann kann dieses Interface nur typenparameter haben, die XYZ sind oder davon ableiten. Als Sonderfälle gibt es noch class, struct und new(), was einen Referenztyp, Valuetyp und einem parameterlosen Konstruktor entspricht.

Hinweis von gfoidl vor 13 Jahren

Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1

Generics werden in jedem Grundlagenbuch zur Genüge behandelt.

Thema geschlossen