Je suis à peu près sûr que cela a déjà été demandé, mais malheureusement, la seule chose que j’ai trouvée est que ce n’était pas une solution pour moi. Dans mon projet actuel, je fais quelque chose comme:
private object obj; private void Initialize() { obj.Initialize(); } private void CreateInstanceA() { obj = Activator.CreateInstance(typeof(MyClassA)); } private void CreateInstanceB() { obj = Activator.CreateInstance(typeof(MyClassB)); }
Ce code ne fonctionne bien sûr pas car je n’ai pas jeté obj
car son type change de façon dynamic.
Comment puis-je le lancer dynamicment?
Trois options:
private dynamic obj;
et il va comstackr et trouver la bonne méthode au moment de l’exécution Fondamentalement, le casting basé sur un type de temps d’exécution n’a pas de sens, car une partie du casting consiste à donner plus d’informations au compilateur … et vous ne l’avez tout simplement pas dans ce cas.
La première option est de loin la plus agréable si vous pouvez éventuellement y parvenir.
Je suppose que CreatInstanceB () devrait réellement utiliser MyClassB, correct?
Dans ce cas, vous pouvez utiliser:
((MyClassA)obj).Initialize();
…
((MyClassB)obj).Initialize();
Ou vous pouvez créer une interface qui a une méthode Initialize et définir obj comme cette interface.