Entwickler-Ecke

Sonstiges (.NET) - Gibt es in c# templates ( für Parameter) wie in c++?


KokaLola - Fr 29.10.10 16:56
Titel: Gibt es in c# templates ( für Parameter) wie in c++?
Moin - ich hoffe meine Fraeg kann hier beantwortet werden...
unzwar suche ich sowas wie Templates für c# in c++ sieht das ganze in etwa so aus:

template < typename myVarType >
myVarType max(myVarType x, myVarType y)
{
if (x < y)
return y;
else
return x;
}


wobei myVarType dann jeder typ sein kann

Mit freundlichen Grüßen


Greenberet - Fr 29.10.10 17:41

Ja sowas gibt es. Nennt sich Generics [http://openbook.galileocomputing.de/visual_csharp/visual_csharp_05_004.htm]


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(-15));
  }
}

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 -)


KokaLola - Fr 29.10.10 18:49

Vielen Dank hat mir schon sehr geholfen =) vllt. kannst ja noch mein 2. Problem lösen... habe ich acuh hier gepostet nur ist eines dazu gekommen... betrifft die XmlSerializer-Klasse....

MfG