2008-12-10 10 views
0

Quelqu'un peut-il m'aider à identifier le but de cette syntaxe non identifiée? C'est un petit quelque chose de plus dans le constructeur pour cet objet. Qu'est-ce que j'essaie de comprendre est ce que le "< IdT>" à la fin de la ligne de déclaration de classe? Je pense que c'est quelque chose que je trouverais utile, j'ai juste besoin de comprendre ce que c'est pourquoi tant de gens semblent faire cela.syntaxe non identifiée dans le constructeur d'objet de domaine

using BasicSample.Core.Utils; 

namespace BasicSample.Core.Domain 
{ 
    /// <summary> 
    /// For a discussion of this object, see 
    /// http://devlicio.us/blogs/billy_mccafferty/archive/2007/04/25/using-equals-gethashcode-effectively.aspx 
    /// </summary> 
    public abstract class DomainObject<IdT> 
    { 
     /// <summary> 
     /// ID may be of type string, int, custom type, etc. 
     /// Setter is protected to allow unit tests to set this property via reflection and to allow 
     /// domain objects more flexibility in setting this for those objects with assigned IDs. 
     /// </summary> 
     public IdT ID { 
      get { return id; } 
      protected set { id = value; } 
     } 

Répondre

2

Lisez à propos Génériques: MSDN

Voilà comment vous définissez une classe générique. Par conséquent appeler

new DomainObject<string>(); 

créerait un objet de domaine avec un identifiant de type chaîne.

La façon dont vous définissez l'ID doit être un int.

La façon dont il est défini l'ID peut être n'importe quel type que vous voulez.

1

De C# spec:

Un type de classe déclarée à prendre paramètres de type est appelé un type de classe générique. Les types de délégué Struct, Interface et peuvent également être génériques. Lorsque la classe générique est utilisé, le type arguments doivent être fournis pour chacun des du type paramètres

0

droite, je suis un peu au courant de ce que les médicaments génériques sont, ont utilisé les listes, les délégués, etc. Ce que je n » Je comprends que je devine quel effet mettre "< dataType>" après une déclaration de classe, et pourquoi vous le feriez. Si je devais déclarer cet objet que je ferais ce qui suit:

Classe publique DomainObject { DomainObject public (ID int) { this.ID = ID; } ....

+0

Dans ce cas, l'ID devrait être un nombre entier, les génériques permettent une plus grande flexibilité. –

1

Dans ce cas, il permet à la propriété ID de prendre diverses valeurs sans avoir à définir de classe pour chaque type de propriété ID. Par exemple, ID peut être int ou long ou Guid en fonction du type de données sous-jacent dans la base de données.