Salut tout le monde,
ma question est plus sur le langage C# en lui-même que sur les forms, désolé de poster ici mais je n'ai pas trouvé de meilleur endroit pour la poser.
Je viens du Delphi et en Delphi il est possible de déclarer une variable et la faire pointer vers une classe, non vers un objet (une instance de la classe), en d'autres termes, je n'affecte pas un nouvel objet avec new ou un objet existant à ma variable mais la déclaration d'une classe ou d'une de ses filles.
Je n'arrive pas à faire la même chose en C#, hors comme il est bien plus récent, je pense qu'il est possible de faire la même chose.
Pour l'instant, je n'ai pas trouvé comment faire dans l'aide du C#.
Mes questions sont donc, est-ce possible ? Et si oui, comment ?
PS : pour ceux qui se demandent à quoi cela sert, voici un exemple, j'ai une classe mère Tableur qui possède certains algos, et 2 classes filles, Excel et OpenOffice qui dérivent de Tableur et qui surchargent les méthodes d'accès, de lecture et d'écriture des données dans le tableur. Je fais un projet pour Excel, un autre pour OpenOffice, au début du projet, il suffit de déclarer le type de la classe fille utilisée et chaque fois que j'ai besoin d'instancier une référence, je n'ai pas besoin de faire de if ni de switch pour savoir quel constructeur appeler.
PPS : un autre exemple d'utilisation est possible en Delphi mais pas en C# car la notion de méthode statique virtuelle n'existe pas.
Hop, je viens de réfléchir (et oui je sais que ça sert de temps en temps), je pense que j'ai une solution, un peu laborieuse peut-être mais qui devrait marcher.
Utiliser le design pattern singleton pour créer une instance de ma classe en private, l'instancier avec un constructeur statique en début de projet (donc suivant la classe fille que je désire), puis faire des méthodes statiques qui vont appeler des méthodes virtuelles de ma classe.
C'est tiré par les cheveux mais ça risque de fonctionner. Si quelqu'un a une solution plus simple, je suis preneur, si par exemple c'est nativement possible dans le langage.
Partager