Sillymind
Messages postés2Date d'inscriptionjeudi 12 août 2004StatutMembreDernière intervention16 octobre 2008
-
16 oct. 2008 à 08:45
Sillymind
Messages postés2Date d'inscriptionjeudi 12 août 2004StatutMembreDernière intervention16 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 ''"
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 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)