Activateur.CreateInstance() troubles

J'ai une usine qui est censé créer des objets qui héritent de la classe Foo au moment de l'exécution. Je pense que ce Système.Activateur.CreateInstance type de retour est le même que le type d'un objet qu'il crée, mais à en juger par le message d'erreur suivant, son type de retour est l'Objet.

Erreur 1 Impossible de convertir implicitement le type 'object' à 'cs_sandbox.Foo'. Une conversion explicite existe (vous manque un plâtre?) F:\projects\cs_sandbox\Form1.cs 46 24 cs_sandbox

OK, alors peut-être je suis manquant d'un plâtre, mais

return (t)System.Activator.CreateInstance(t);

résultats dans un autre message d'erreur, qui, je dois l'avouer, -- n'a pas de sens pour moi:

Erreur 1 le type ou Le nom d'espace de noms 't' n'a pas pu être trouvée (vous manque une directive using ou une référence d'assembly?) F:\projects\cs_sandbox\Form1.cs 45 25 cs_sandbox

Et voici mon code:

class Foo { }
class FooChild1 : Foo { }
class FooChild2 : Foo { }

class MyFactory
{
    public static Foo CreateInstance(string s)
    {
        Type t;
        if (s.StartsWith("abcdef"))
        {
            t = typeof(FooChild1);
            return System.Activator.CreateInstance(t);
        }
        else
        {
            t = typeof(FooChild2);
            return System.Activator.CreateInstance(t);
        }
    }
}

Comment puis-je corriger ce code? Ou, si elle n'est pas réparable, ce sont d'autres façons de créer des objets qui héritent d'une classe spécifique au moment de l'exécution?

Tu veux dire Bar et Meh hériter de Foo?
Désolé! Correction du code.

OriginalL'auteur MiseryIndex | 2009-09-27

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *