Können C # -Generika einen bestimmten Basistyp haben?
Ist es möglich, dass eine generische Schnittstelle mit dem Typ auf der Grundlage eines bestimmten übergeordneten Klasse?
Beispiel:
public interface IGenericFace<T : BaseClass>
{
}
Offensichtlich der obige code nicht funktioniert aber wenn es das täte, was ich bin versucht zu sagen, der compiler ist, dass T
muss eine sub-Klasse von BaseClass
. Kann man das nicht, gibt es Pläne für ihn, etc.?
Ich denke, es wäre sinnvoll, im Hinblick auf ein bestimmtes Projekt, so dass Sie sicher, dass eine generische Schnittstelle/Klasse ist nicht mit unbeabsichtigten Typ(en) zur compile-Zeit. Oder auch auf die Art der selbst-Dokument: zeigen Sie, was Art von Art gedacht ist.
InformationsquelleAutor der Frage Neil C. Obremski | 2008-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor der Antwort Ryan Lundy
Was Ihr meint das ist so genannte "Generische Constraints". Es gibt zahlreiche Einschränkungen, die gesetzt werden können auf einen generischen Typ.
Einige grundlegende Beispiele sind wie folgt:
where T: struct
- Typ-argument muss einen Wert geben. Einen beliebigen Wert geben, außerNullable
- angegeben werden können. Sehen Verwenden Von Auf Null Festlegbaren Typen (C# - Programmierhandbuch) für weitere Informationen.where T : class
- Das typargument muss ein Verweistyp ist; dies gilt auch für jede Klasse, interface, delegate, oder array-Typ.where T : new()
- Das typargument muss einen öffentlichen parameterlosen Konstruktor. Wenn Sie zusammen mit anderen Einschränkungen, dienew()
Einschränkung muss angegeben werden letzter.where T : <base class name>
- Das argument type sein muss, oder leiten Sie aus der angegebenen Basis-Klasse.where T : <interface name>
- Typ-argument muss oder implementiert das angegebene interface. Multi-interface-Einschränkungen können angegeben werden. Die zwingenden Schnittstelle können auch generisch sein.where T : U
- Das argument type geliefertT
werden muss, oder abgeleitet von dem argument geliefert fürU
. Dies wird als ein nackter Typ-Einschränkung.Diese können auch miteinander verknüpft werden, wie dieser:
C#
VB
InformationsquelleAutor der Antwort Micah
ja.
InformationsquelleAutor der Antwort
Weitere Infos über Generische Schnittstellen: http://msdn.microsoft.com/en-us/library/kwtft8ak(VS.80).aspx
InformationsquelleAutor der Antwort casademora