2017-08-24 4 views
0

ich diese Klasse haben:Was bedeutet das: Class <T> where T: Klasse

public static class Repository<T> where T : class 
{ 
    .... 
} 

Ich verstehe public und static und class und Repository<T>, aber ich bin nicht zu verstehen, dieses:

where T : class 

Ist Repository Erweiterung oder Implementierung class? Oder bezieht sich die : class auf den Typ <T>?

!! AUCH !!:

Und wenn ich eine abstrakte Basisklasse haben DataAccessBase, dass ich diese Klasse wollen Repository erben, wie kann ich das tun?

+1

Es ist ein [Typ Einschränkung] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters). –

+0

Die Deklarationen nach 'where T' beziehen sich auf den' T'-Typ. Außerdem werden Sie es wie jede andere generische Klasse instanziieren, die ': class' beschränkt die Typen auf Referenztypen, nicht auf Werttypen. – Gusman

+0

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/where-generic-type-constraint –

Antwort

3

Wir es schränken über ein class als generischen Parameter konsumierbar und nicht mit struct (Wertetypen) verwendet werden.

wenn wir die Einschränkung des class auf T nicht zutreffen, wäre es mit struct zu und hier verwendbar sein hat der Autor beschränkt diese generische Klasse mit T Parameter mit einem Referenztyp verwendbar heißt class als Typ-Parameter.

Weitere Details finden Sie in der MSDN docs on Type Constraint.

+0

ok danke! Wenn also dieses Klassenrepository auch von einer abstrakten Basisklasse erben soll, wie würde diese Syntax aussehen? –

+1

öffentliche Klasse Repository : DataAccessBase wo T: Klasse – GhostTW

+0

@GhostTW ist richtig, können Sie den Weg, den er gerade gezeigt hat –