Bonjour,

J'ai un petit soucis quand au cast d'un type générique. Voici un exemple de ce que je cherche à faire. J'ai trois classes :

AutreClass
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public class AutreClass 
{
        public virtual void Aff()
        {
            System.Console.Out.WriteLine("AutreClass.Aff");
        }
 
        public static void Main(string[] args)
        {
            SuperClass<AutreClass> super = new SuperClass<AutreClass>();
            super.Add(new TroisiemeClass());
 
            Console.In.Read();
        }
}
TroisiemeClass
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public class TroisiemeClass : AutreClass
    {
        public override void Aff()
        {
            System.Console.Out.WriteLine("TroisiemeClass.Aff");
        }
 
        public void Aff2()
        {
            System.Console.Out.WriteLine("TroisiemeClass.Aff2");
        }
    }
et une classe générique SuperClass
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
public class SuperClass<Info> where Info : AutreClass 
{
 
        public void Add(Info info)
        {
            if (info is TroisiemeClass)
                ((TroisiemeClass)info).Aff2();
            else info.Aff();
 
        }
}
Je n'arrive pas à comprendre pourquoi le compilateur n'accepte pas le cast de ((TroisiemeClass)info) alors que TroisiemeClass hérite de AutreClass, quelqu'un pourrait-il m'expliquer? Ou existe-t-il une solution alternative?

Remarque : Le reste du code compile sans problème

Merci.