Deux classes qui se ressemblent

Résolu
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
-
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

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
59
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
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2
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.
Messages postés
143
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
25 octobre 2006

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();
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

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
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2
Salut, c'est vrai que c'est plus clair avec l'exemple
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

super clair. Merci !

Mathmax
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
59
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