Je crois avoir compris où tu veux en venir.
Pour résoudre ce problème, j'aurais utilisé le Design Pattern Composite.
J'explique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
using System.Collections.Generic;
public class DonneesEleve
{
string Nom;
string Prenom;
}
public class DonneesProfesseur
{
List<string> Matieres;
}
public class Eleve
{
public DonneesEleve id;
}
public class Professeur : Eleve
{
public DonneesProfesseur curriculum;
public Professeur (Eleve e) : base()
{
this.id = e.id;
}
} |
C'est un peu plus lourd à mettre en place et à manipuler, mais ça marche très bien dans ton cas. Et conceptuellement, ça marche très bien aussi.
Quand à ton truc de chercher toutes les références à une classe, je vois bien une solution détournée, mais encore il faut faire attention.
1 2 3 4 5 6 7 8 9 10 11 12 13
|
using System.Collections.Generic;
public class Eleve
{
public static readonly List<Eleve> instances = new List<Eleve>();
public Eleve ()
{
instances.Add( this );
}
#region Le reste de la classe
#endregion
} |
Est-ce que tu vois où je veux en venir?
Le problème, c'est que pour que ça marche, il faut toujours penser à appeler le constructeur par défaut de la classe mère.
Donc, dans tous les constructeurs de toutes les classes, il te faudra utiliser des this et des base le plus possible. Si tu en oublies 1, c'est toute la branche qui est menacée.
Comme ça:
1 2 3 4
| public class Professeur {
public Professeur() : base() {}
public Professeur(Eleve e):this(){}
} |
Et puis, franchement, c'est vraiment pas élégant.
Ce que j'avais fait une fois, c'est que dans ma classe de base, j'ai un booléen privé qui dit si tel constructeur a été appelé, et toutes mes méthodes et properties commencent par
Debug.Assert(bool, string)
lien MSDN
J'espère t'avoir donné plein d'idées dangereuses.
Bon courage
Partager