C# Foreach sur une List<> de classes héritées
Résolu
ElementW
Messages postés
4814
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Nico# Messages postés 323 Date d'inscription Statut Membre Dernière intervention -
Nico# Messages postés 323 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
depuis quelque temps (30 minutes pour tout vous dire) je suis confronté à un problème d'héritage de classe:
J'ai créé ma classe "principale":
J'ai créé une autre classe "GaussianBlur" a partir de celle-ci:
J'ai créé une classe qui fait office List de shaders comme ceci:
Je m'occupe de la remplir avec un shader GaussianBlur, puis j'effectue un foreach sur celle-ci:
Et c'est ici que le problème se pose:
Pour vérifier le bon fonctionnement du programme, je mets des petites lignes de Console.WriteLine un peu partout. Une d'entre elles est chargée de me dire le nom du shader qui va être appliqué, elle se situe dans le foreach.
Sauf que, comme l'objet qui sort de la liste est un objet Shader, quand la ligne essaie de me sortir le nom du shader (_Shader.ShaderName), il me sort "Base shader" et non "Gaussian Blur".
Donc le shader censé être appliqué n'est pas le Gaussian Blur prévu dans la liste mais bien le shader de base (qui ne transforme en rien l'image).
Pouvez-vous m'éclairer s'il vous plait?
Merci d'avance!
depuis quelque temps (30 minutes pour tout vous dire) je suis confronté à un problème d'héritage de classe:
J'ai créé ma classe "principale":
class Shader { public string ShaderName = "Base shader"; public Bitmap ApplyShader(Bitmap SrcImage) { return SrcImage; } }
J'ai créé une autre classe "GaussianBlur" a partir de celle-ci:
class GaussianBlur : Shader { new public string ShaderName = "Gaussian Blur"; new public Bitmap ApplyShader(Bitmap SrcImage) { /* Gros bout de code */ } }
J'ai créé une classe qui fait office List de shaders comme ceci:
class ShaderList : System.Collections.Generic.List<Shader>
Je m'occupe de la remplir avec un shader GaussianBlur, puis j'effectue un foreach sur celle-ci:
foreach(Shader _Shader in _ShaderList)
Et c'est ici que le problème se pose:
Pour vérifier le bon fonctionnement du programme, je mets des petites lignes de Console.WriteLine un peu partout. Une d'entre elles est chargée de me dire le nom du shader qui va être appliqué, elle se situe dans le foreach.
Sauf que, comme l'objet qui sort de la liste est un objet Shader, quand la ligne essaie de me sortir le nom du shader (_Shader.ShaderName), il me sort "Base shader" et non "Gaussian Blur".
Donc le shader censé être appliqué n'est pas le Gaussian Blur prévu dans la liste mais bien le shader de base (qui ne transforme en rien l'image).
Pouvez-vous m'éclairer s'il vous plait?
Merci d'avance!
A voir également:
- C# Foreach sur une List<> de classes héritées
- List disk - Guide
- Comment faire une liste déroulante sur excel - Guide
- Directory list & print - Télécharger - Divers Utilitaires
- Logiciel de classement de photos gratuit - Guide
- Comment cacher sa liste d'amis sur facebook - Guide
1 réponse
Slt,
Voila ce que je ferrai a ta place
je créer une interface IShader
Puis ta liste generic je la ferai sur ce IShader
Ton GaussianBlur derive de IShader
enfin dans ton foreach
Et voila tu repete la meme chose pour autant de shader que tu veut tu moment que tu derive de IShader
Voila ce que je ferrai a ta place
je créer une interface IShader
public interface IShader { string ShaderName { get; } Bitmap ApplyShader(BitmapSource); }
Puis ta liste generic je la ferai sur ce IShader
public class ShaderList:System.Collections.Generic.List<IShader> { }
Ton GaussianBlur derive de IShader
public class GaussianBlur : IShader { #region Implementation of IShader public string ShaderName { get { return "GaussianBlur"; }} // et pareil pour la methode... #endregion }
enfin dans ton foreach
ShaderList shaderList = new ShaderList(); shaderList.Add(new GaussianBlur()); foreach (var sha in shaderList) { Console.WriteLine(sha.ShaderName); // sha.ShaderName vaut bien GaussianBlur } Console.ReadLine();
Et voila tu repete la meme chose pour autant de shader que tu veut tu moment que tu derive de IShader