Toutoune DevZone

.NET (C#)

Généricité contraintes en C#

Comme en Java 5, il est possible d'imposer des contraintes de généricité en C#.

Le type T doit implémenter une interface donnée :

public class MyGenericClass<T> where T:IComparable
{
   ...
}

Le type T doit hériter d'une classe donnée :

public class MyGenericClass<T> where T:MyParentClass
{
   ...
}

Le type T doit être une classe, et le type U une structure :

// cs_where.cs
// compile with: /target:library
using System;

class MyClassy<T, U>
    where T : class
    where U : struct
{
}

Syntaxe (MSDN) : http://msdn2.microsoft.com/en-us/library/6b0scde8.aspx
Contraintes sur les types (MSDN) : http://msdn2.microsoft.com/en-us/library/d5x73970.aspx

Posted: nov. 21 2006, 09:54 par Toutoune_31 | avec 6 comment(s)
Classé sous :

Commentaires

Styx31 a dit :

Exemple :

public abstract class DataClassListBase<T> : IList<T>, IBindingList where T : class, IRevertibleChangeTracking, IEditableWithEventsObject, new()

{

 ...

}

simple, isn't it ?

# novembre 21, 2006 10:37

Mimetis a dit :

Thom, arrètes tu fais peur à tout le monde là :p

# novembre 21, 2006 9:40

Djé-Force a dit :

Je comprends cette déclaration, à l'exception du contenu de la clause 'where' : pour résumer, le type T doit être une classe implémentant IRevertibleChangeTracking et IEditableWithEventsObject, mais que signifie le new() ?

(flemme de consulter la msdn :s )

# novembre 23, 2006 12:32

Toutoune_31 a dit :

"new()" signifie que T doit avoir un constructeur par défaut.

# novembre 27, 2006 6:39

jeremy a dit :

C'est possible d'avoir :

myClass {

static public void ajouter<T> (T elem)

{

[...]

}

}

et de l'appeller de la sorte :

myClass.ajouter<monElem.getType()>(monElem);

? de spécifier dynamiquement le Type a utiliser ?

# mars 28, 2007 6:02

Toutoune_31 a dit :

Enfait, si un des tes arguments est de type T tu n'es pas obligé de le passer à la fonction.

En clair, ceci fonctionne :

myClass.ajouter(monElem);

# avril 30, 2007 5:46
Laissez un commentaire

(requis) 

(requis) 

(optionel(le))

(requis)