在C#中创建一个对象而不使用新的关键字?

时间:2011-11-08 10:46:15

标签: c# new-operator

有没有办法在C#中创建一个不使用new关键字的对象,比如class.forname();  在java。

我想动态创建一个类的对象。对象创建可能取决于用户输入 我有一个基类x,它有5个子类(a,b,c,d,e)。我的用户输入将是a或b或... e类名。使用这个我需要创建该类的对象。我该怎么做

5 个答案:

答案 0 :(得分:14)

您可以使用Activator class

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

答案 1 :(得分:3)

你的意思是静态类吗?

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

然后,您可以拨打Foo.Bar();

但是,您最好解释一下您尝试做什么。 "在不使用new"的情况下创建对象;是您提出的解决您遇到的问题的解决方案。只是解释这个问题可能会揭示一种更简单的解决方法。

编辑:你似乎需要一个factory,给出你的评论"我想动态创建一个类的对象。对象创建可能取决于用户输入"。

所以这样的事情就足够了:

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

在必要时投入界面或抽象类。

答案 2 :(得分:0)

您可以使用default关键字,但只会生成值类型的实例:

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

答案 3 :(得分:0)

Activator类很慢你可以使用lambda表达式来看看这个 Activator alternative

答案 4 :(得分:-4)

您可以使用

进行操作
typeof(MyType)