¿Crear un objeto en C # sin el uso de una nueva palabra clave? [cerrado]

¿Hay alguna manera de crear un objeto sin el uso de una nueva palabra clave en C # algo como class.forname (); en java.

Quiero crear dinámicamente un objeto de una clase. La creación del objeto puede depender de la entrada de los usuarios.
Tengo una clase base xy hay 5 subclases (a, b, c, d, e) de la misma. Mi entrada de usuario será aob o ... e nombres de clase. Usando esto, necesito crear un objeto de esa clase. ¿Cómo hago esto?

preguntado el 08 de noviembre de 11 a las 10:11

¿Qué estás intentando lograr? -

Quiero crear dinámicamente un objeto de una clase. La creación del objeto puede depender de la entrada de los usuarios. -

¿Quién vota a favor de preguntas como esta? "Esta pregunta muestra un esfuerzo de investigación"; (¿oh?) "es útil y claro" (¿oh?). -

depende de su constructor. si aceptan los mismos parámetros, podría pensar en usar una fábrica. -

5 Respuestas

se puede utilizar el Clase de activador.

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

respondido 08 nov., 11:14

Cabe señalar que esto es significativamente más lento y no debe usarse solo para evitar el new operador - Marc Gravell

veo un new palabra clave allí. :PAG - CodeCaster

¿Te refieres a una clase estática?

static class Foo
{
    public static void Bar()
    {
        Console.WriteLine("Foo.Bar()");
    }
}

Entonces puedes llamar Foo.Bar();.

Pero será mejor que expliques lo que intentas hacer. "Crear un objeto sin el uso de new"es una solución que se te ocurrió para un problema que tienes. El solo hecho de explicar ese problema podría revelar una manera más fácil de resolverlo.

Editar: parece que necesitas un fábrica, dado su comentario "Quiero crear dinámicamente un objeto de una clase. La creación del objeto puede depender de la entrada de los usuarios".

Entonces, algo como esto puede ser suficiente:

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 { }

Lanzar en una interfaz o clase abstracta cuando sea necesario.

respondido 08 nov., 11:14

La clase de activador es muy lenta, puedes usar las expresiones lambda, mira esto Alternativa de activador

contestado el 23 de mayo de 17 a las 15:05

Puede utilizar el default palabra clave, pero solo dará como resultado una instancia para los tipos de valor:

var s = default(string); // null
var i = default(int);    // integer (0)

Respondido 12 Jul 12, 12:07

Es posible que pueda hacerlo con

typeof(MyType)

respondido 08 nov., 11:14

Lo siento, voté en contra porque la respuesta no deja claro cómo puedes hacerlo. - Tim Barrass

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.