Conversion object vers class

Résolu
Sillymind Messages postés 2 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 16 octobre 2008 - 16 oct. 2008 à 08:45
Sillymind Messages postés 2 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 16 octobre 2008 - 16 oct. 2008 à 10:51
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

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
16 oct. 2008 à 09:12
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)
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
16 oct. 2008 à 08:58
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-
0
Sillymind Messages postés 2 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 16 octobre 2008
16 oct. 2008 à 10:51
Merci! C effectivement ce dont j'avais besoin
0
Rejoignez-nous