Das ist neu in C# 2.0

Flexible Typ-Parameter und Constraints

Generics sind nicht auf einen Typ-Parameter beschränkt. Wenn etwa der Beispiel-Container eine Funktion erfüllen würde, die ein Objekt eines anderen Typs als des Typ-Parameters erzeugt, dann bräuchten Sie zwei separate Typ-Parameter: Einen für den Eingangs-Typen und einen für die Angabe des Typs des Produktes.

pulic class Test<T, T_RESULT>

{

}

In diesem Fall erhalten Sie zwei Typ-Parameter, die Sie innerhalb der Klassendefinition verwenden können.

Ohne weitere Informationen ist diese Verwendung von Typ-Parametern zwar praktisch, aber viel mehr Möglichkeiten als die Konstruktion von weiteren Collections stehen Ihnen damit noch nicht zur Verfügung. Eine Einschränkung ist beispielsweise, dass Sie keine Methoden des Typs aufrufen können: Der Compiler weiß einfach nicht, welche Methoden der Typ zur Verfügung stellt.

Dieses Problem beheben die neuen "Constraints". Dabei handelt es sich um Einschränkungen, die Bedingungen für den Typen festlegen. Das erreichen Sie beispielsweise, indem Sie ein zu implementierendes Interface vorschreiben.

Angenommen, Sie haben ein Interface das die Methode Calc() vorschreibt:

public interface ICalculate

{

double Calc();

}

Dieses Interface können Sie im Anschluss als Constraint für Ihren generischen Typen verwenden.

public class Test<T> where T: ICalculate

{