Bonjour,
Je me trouve confronté à un problème ce conception que j'ai déjà eu de nombreuse fois. Cette fois ci, pas question de le contourner encore une fois. Je suis sur que je n'ai pas comprit un principe de l'objet... nous allons voir. Je vais vous illustrer ça au mieux.
Je suis intéressé par récupérer des données sur les process. Fenêtre Ctrl-Shift-Escape pour ceux qui ne le sauraient pas. En .net il existe une classe Process. Cette classe contient tout ce qu'il me faut excepté une propriété. Un flag que je met à 1 ou 0 pour savoir si j'ai traité le process en question (c'est un exemple). J'aimerais aussi, pour la forme, redéfinir la méthode ToString(). Cette classe possède aussi une méthode statique GetProcesses() qui me permet de récupérer tout les Process[] en cours.
Comme il me manque une propriété et que j'aimerais redéfinir une méthode je crée une nouvelle classe que je vais nommer ExtendedProcess et qui va tout simplement hériter de Process.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class ExtendedProcess : System.Diagnostics.Process { private bool _processStatus; public bool ProcessStatus { get { return _processStatus; } set { _processStatus = value; } } public override string ToString() { return this.ProcessName; } }
Dans mon programme je n'aimerais utiliser que des ExtendedProcess. Le problème c'est que je récupère quand même la liste de tout les Process[] via la méthode statique System.Diagnostics.Process.GetProcesses(). Méthode qui me retourne évidemment des Process[] et non des ExtendedProcess[]. Que dois faire pour faire en sorte que
- soit System.Diagnostics.Process.GetProcesses() me retourne des ExtendedProcess[],
- soit je puisse facilement transformer ma liste de Process[] en ExtendedProcess[].
- soit je suis complètement à côté de la plaque et je dois pas utiliser l'héritage.
Actuellement j'ai fait ceci :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private List<ExtendedProcess> extendedProcessList = new List<ExtendedProcess>(); private Process[] processList = Process.GetProcesses(); foreach (Process p in processList) { extendedProcessList.Add(p); // Ce qui me crée une exception bien sur. }
Qu'est ce que je fait mal ? C'est mon choix d'hériter de Process qui est mauvais ?
Partager