Создать объект в C# без использования ключевого слова new? [закрытый]

есть ли способ создать объект без использования нового ключевого слова в C# , например class.forname(); в Java.

Я хочу динамически создать объект класса. Создание объекта может зависеть от ввода пользователя.
У меня есть базовый класс x и есть 5 подклассов (a,b,c,d,e). Мой пользовательский ввод будет a или b или...е имена классов. Используя это, мне нужно создать объект этого класса.Как это сделать

5 ответов


можно использовать активатор класс.

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

вы имеете в виду статический класс?

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

затем вы можете позвонить Foo.Bar();.

но вам лучше объяснить, что вы пытаетесь сделать. "Создание объекта без использования new" это решение, которое вы придумали для вас проблемы. Простое объяснение этой проблемы может открыть более простой способ ее решения.

Edit: кажется, вам нужен завод, учитывая ваш комментарий " Я хочу динамически создавать объект класса. Создание объекта может зависеть от ввода пользователя".

что-то вроде этого может быть достаточно:

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

бросание интерфейса или абстрактного класса, где это необходимо.


класс Activator очень медленно, вы можете использовать лямбда-выражения в активатор альтернатива


можно использовать default ключевое слово, но это приведет лишь к экземпляру для типов значений:

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

вы можете сделать это с помощью

typeof(MyType)