Deux classes qui se ressemblent

Résolu
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 21 août 2006 à 22:53
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 22 août 2006 à 14:36
Bonjour,
J'ai 2 classes qui' se ressembent de part leurs constructeurs, leurs méthodes et leur propriétés. On ne peut pas dire que l'une hérite de l'autre, mais je voulais savoir si il y avait possibilité de réduire le nombre de ligne de code en écrivant une seule fois les parties qui sont commune aux deux classes. Bien sûre je peux faire une nouvelle classe dont l'unique but est de stocker des méthodes utilisables par les 2 classes... Mais existe t-il une méthode plus propre ? Par exemple est-il possible de faire hériter partiellement une classe d'une autre, c'est à dire la faire hériter de certaines méthodes, propriétés,... mais pas de toutes ?

Mathmax

7 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
21 août 2006 à 23:16
Salut,
La réponse est bien sûre non, une autre réponse "casserait" toute la théorie de l'orienté l'object. On peut en quelque sorte caché des méthodes (pour qu'elle ne soit pas vue par intellisens par exemple) mais dans tout les cas, "tout" est toujours hérité, et c'est logique !
La méthode très propre et recommandée est effectivement de créer une nouvelle classe, qui sera "mère" des deux autres. Si cette classe n'a pas de raison d'être instanciée, car trop générale et pas directement exploitable pour ces raisons, on la marque comme étant abstraite.

public abstract class MyClass
{

}

<hr size="2" />VC# forever
3
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
22 août 2006 à 08:09
Salut, si tu es obligé d'écrire ces lignes c'est parceque tu déclares les classes filles dans la classe mère mais rien ne t'y oblige. Déclare les en dehors.
3
gcorbineau Messages postés 143 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 octobre 2006
22 août 2006 à 08:11
Un héritage ne se fait pas comme cela.

Tu dois faire:

public abstract class ClassMere
{
...
}

public class ClassFille1 : ClassMere
{
...
}

public class ClassFille2 : ClassMere
{
...
}

et Maintenant tu peux l'instancier comme cela:
ClassFille1 Nom = new ClassFille1();
3
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
22 août 2006 à 01:57
Merci pour ta réponse. Un seul point me gène. Si par exemple j'ai :
public abstract class ClassMere
{
    public class ClassFille1
    {

       ...
    }
    public class ClassFille2

    {


       ...

    }
}

Je suis obligé, pour instancier une classe fille d'écrire :
ClassMere.ClassFille1 Nom = new ClassMere.ClassFille1();

alors que j'aimerais pouvoir écrire tout simplement :
ClassFille1 Nom = new ClassFille1();

Est-ce possible ? Faut-il modifier quelque chôse sur la classe mère pour celà ?
Mathmax
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
22 août 2006 à 08:54
Salut, c'est vrai que c'est plus clair avec l'exemple
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
22 août 2006 à 14:28
super clair. Merci !

Mathmax
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
22 août 2006 à 14:36
Remarque tu peux instancier comme ça aussi :

ClassMere cm = new ClassFille1();

Dût au fait que l'une dérive de l'autre, bien entendu.

<hr size="2" />VC# forever
0
Rejoignez-nous