Th69 - Fr 29.10.10 18:21
Der Unterschied ist aber, daß Generics nicht einfache Codeersetzungen sind, so daß Operatoren nicht unterstützt werden (d.h. dein konkretes Beispiel mit einer Maximumfunktion kann man so nicht nach C# übertragen).
Generics kann man nur für Datentypen einer bestimmten Basisklasse (bzw. Interface) verwenden und dabei dann auch nur Methoden dieser Klasse verwenden (wenn man nicht innerhalb der Generic-Methode explizit auf einen bestimmten Typ 'castet').
Konkret für den '<'-Operator: dieser ist nur für die numerischen Datentypen (int, float, decimal, ...) sowie Enum(erationen) definiert (die Operatoren kann man aber - wie in C++ - für eine eigene Klasse überladen).
Als Alternative gibt es in .NET die IComparable<T>-Schnittstelle, d.h.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| class Program { static void Main(string[] args) { Console.WriteLine(Num.Max(-1, 5)); } }
class Num { public static T Max<T>(T x, T y) where T : IComparable<T> { return x.CompareTo(y) > 0 ? x : y; } } |
So ich hoffe, dies beantwortet deine Frage zufriedenstellend -)