9
votes

Créez un objet dans C # sans l'utilisation de nouveau mot-clé?

Y a-t-il un moyen de créer un objet sans utiliser de nouveau mot clé dans c # quelque chose comme classe.forname (); en Java.

Je veux créer de manière dynamique un objet d'une classe. La création d'objets peut dépendre de la saisie des utilisateurs.
J'ai une classe de base x et il y a 5 sous-classes (A, B, C, D, E). Ma saisie d'utilisateur sera une ou ses noms de classe. En utilisant cela, j'ai besoin de créer un objet de cette classe.Comment fais-je cela


9 commentaires

Qu'essayez-vous d'atteindre?


Stackoverflow.com/Questtions/3538304/...


D'accord avec Gaz .., veuillez fournir plus d'informations. Il y a de rares cas où vous voulez faire quelque chose comme ça.


Même chose que l'objet.getType (). Ce que cela a à voir avec l'opérateur nouveau est difficile à deviner. Je suppose que vous serez intéressé par Activator.CreateInstance ().


Je veux créer de manière dynamique un objet d'une classe. La création d'objets peut dépendre de la saisie des utilisateurs.


Qui évoque des questions comme celle-ci? "Cette question montre l'effort de recherche;" (Oh?) "C'est utile et clair" (Oh?).


Si tout ce que vous voulez faire est de créer un type différent en fonction de diverses pièces d'utilisateur, il vous suffit de mettre en œuvre une usine ou un constructeur, mais il est difficile de deviner sans savoir comment la création de la classe doit être dérivée de l'entrée.


J'ai une classe de base x et il y a 5 sous-classes (A, B, C, D, E). Mon entrée d'utilisateur sera A ou B ou ... E Utilisez cela, j'ai besoin de créer un objet de cette classe.Comment fais-je cela


Cela dépend de leur constructeur. S'ils acceptent les mêmes paramètres, vous pouvez penser à utiliser une usine.


5 Réponses :


15
votes

Vous pouvez utiliser Classe d'activateur .

Type type = typeof(MyClass);
object[] parameters = new object[]{1, "hello", "world" };
object obj = Activator.CreateInstance(type, parameters);
MyClass myClass = obj as MyClass;


2 commentaires

Il convient de noter que cela est nettement plus lent et ne doit pas être utilisé juste pour éviter le nouvel opérateur neuf


Je vois un nouveau mot-clé là-bas. : P



-4
votes

Vous pourrez peut-être le faire avec

typeof(MyType)


1 commentaires

Désolé - Townvoted parce que la réponse ne précise pas comment vous pourriez le faire.



3
votes

Voulez-vous dire une classe statique?

static class PizzaFactory
{
    static Pizza CreatePizza(String topping)
    {
        if (topping == "cheese")
        {
            return new CheesePizza();
        }
        else if (topping == "salami")
        {
            return new SalamiPizza();
        }
    }
}

class Pizza { }
class CheesePizza : Pizza { }
class SalamiPizza : Pizza { }


0 commentaires

0
votes

Vous pouvez utiliser le mot-clé par défaut, mais il n'entraînera qu'une instance pour les types de valeur: xxx


0 commentaires

0
votes

La classe d'activateur est très lente que vous pouvez utiliser les expressions Lambda Regardez cette Alternative activatrice


0 commentaires