有没有办法在C#中创建一个不使用new关键字的对象,比如class.forname(); 在java。
我想动态创建一个类的对象。对象创建可能取决于用户输入 我有一个基类x,它有5个子类(a,b,c,d,e)。我的用户输入将是a或b或... e类名。使用这个我需要创建该类的对象。我该怎么做
答案 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)