2016-12-24 4 views
-2

Au cours de la préparation de « Programing en C# » Certification de this livre à l'objectif 2.1 où le code suivant apparaît pour les types génériques:Generics en .net 2.0: Utilisation d'un cas de classe sur une définition de classe

class MyClass<T> where T : class, new() 
{ 
    public MyClass() 
    { 
     MyProperty = new T(); 
    } 

    T MyProperty { get; set; } 
} 

Je sais ce qu'est le type générique et pourquoi nous en avons besoin, mais quelqu'un peut-il expliquer ce code déroutant et comment nous pouvons l'utiliser avec n'importe quel exemple.

Répondre

1

Je suppose que vous ne comprenez pas cette partie:

where T:class,new() 

Cela dit que T doit être un type de référence (à savoir la classe) et il doit avoir un constructeur par défaut (un constructeur sans argument). Cela signifie que T ne peut pas être int car il s'agit d'une structure. Il ne peut pas non plus être StreamReader car il n'a pas de constructeur par défaut.

Pourquoi est-ce utile?

Certaines choses ne peuvent être utilisées qu'avec des types de référence mais pas des types de valeur, par ex. as. Et parce que vous avez dit T doit avoir un constructeur par défaut, vous pouvez le faire:

public MyClass() 
{ 
    MyProperty = new T(); 
} 
T MyProperty { get; set; } 

Depuis T doit avoir un constructeur par défaut, vous pouvez appeler new T().

+0

Ouais c'est la première partie qui me confondez (ie où T: classe, nouvelle()) Maintenant, selon votre explication suppose que nous avons la classe personne comme ci-dessous classe Personne { personne() { this.PersonName = "Jack"; } public string PersonneName {get; set; } } Comment nous pouvons utiliser ce MyClass générique avec ceci. –

+1

Puisque 'Person' est un type de référence (une classe) et qu'il a un constructeur par défaut. Il peut être utilisé comme paramètre de type générique pour 'MyClass'. Vous pouvez en initialiser une instance comme ceci: 'var obj = new MyClass ()'. Maintenant, 'obj.MyProperty' stocke une personne avec un nom de" Jack ". @UsmanHayatKhan – Sweeper

+0

Vous devriez inclure ceci dans votre réponse, car c'est probablement la partie que l'OP n'a pas comprise. –