Conversion object vers class [Résolu]

Signaler
Messages postés
2
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
16 octobre 2008
-
Messages postés
2
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
16 octobre 2008
-
Bonjour,

Je débute en C# alors SVP soyez indulgeant.
J'aimerai savoir s'il est possible de créer une variable de classe qui pourrait pointer sur n'importe quel type d'objet definit dans d'autre classe et autorisant l'appel des propriétés de chacun de ces objets:

pour être clair:
class a{
   public object Monobjet;
   public static void main
   {
      b tempb = new b();
      c tempc = new c();
      Monobjet = tempb;
      Console.Writeline (Monobjet.propriété_de_b);  // plante
      Monobjet = tempc;
      Console.Writeline (Monobjet.propriété_de_c); // plante
   }
}

class b{
   public b{
   ...
   }
   public string propriété_de_b(){
      return "Coucou b";
   }
}

class c{
   public c{
   ...
   }
   public string propriété_de_c(){
      return "Coucou c";
   }
}

L'affectation à l'objet de type object fonctione mais l'appel des propriété plante sur "'object' does not contain definition for ''"

Quelqu'un aurait il une idée?
d'avance merci,

3 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Hello,

C'est tout a fait normal que ça ne fonctionne pas.
Si tu déclares une variable de type object, le compilateur ne connait que les méthode lié à object, et pas à tes classes.
Il y a plusieurs possibilités.

La 1ère est le casting.
      Si à un moment, tu est sûr que ton objet est de type b, tu peux faire
     if(Monobject is typeof(b))
          Console.Writeline (((b)Monobjet).propriété_de_b);

La 2ème est de travailler avec des interfaces
     Si tes classes b et c implémente la même interface IName, tu peut faire
     IName Monobject = tempb ;
     Console.Writeline (Monobjet.propriété_de_IName);

Amicalement, SharpMao

P.S. Je suis peut-être un peu rétro, mais en principe, on essaie d'éviter les caractères accentués dans le code.

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
bonjour,
pseudocode:

public abstract class A
public class B : A
public class C : A

public class Main
{
  public static void test()
  {
       A a1 = new B();
      A a2 = new C();
  }
}

<hr />
-My Blog-
Messages postés
2
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
16 octobre 2008

Merci! C effectivement ce dont j'avais besoin