C# 如何在C中使用类名作为参数#

C# 如何在C中使用类名作为参数#,c#,C#,我想做的是自动创建一些对象 例如,在Java中,类可以作为参数传递 Class A{ } Object createObjectBy(class clazz){ // .. do construction work here } when using it, just ---> createObjectBy(A.class) 这对很多事情都有好处 那么,我怎样才能在C#中做类似的事情呢 用法: createObjectBy(typeof(A)); 或者您可以直接使

我想做的是自动创建一些对象

例如,在Java中,类可以作为参数传递

Class A{

}


Object createObjectBy(class clazz){
       // .. do construction work here
}

when using it, just ---> createObjectBy(A.class)
这对很多事情都有好处

那么,我怎样才能在C#中做类似的事情呢

用法:

createObjectBy(typeof(A));
或者您可以直接使用
Activator.CreateInstance
:-)

C#不支持此功能。但是你想做什么呢

您可能可以使用:

createObjectBy(Type type);

createObjectBy();

使用类类型。您可以通过调用返回它的实例

obj.GetType();
或者没有对象实例

typeof(className);

我希望它能有所帮助。

理想的方法是使用泛型

类型在设计时已知 调用示例如下所示

var employee = CreateInstance<Employee>();
var instance = CreateInstance(someType);
演出 当然,没有什么比使用关键字
new
来实例化对象更好的了。除了可能不实例化,而是重用对象,比如通过缓存

如果您必须在类型未知的情况下选择第二种方法,则需要执行以下操作:
Activator.CreateInstance
。尽管本文建议使用lambda表达式,但您最大的考虑是:

  • 您的未知对象是否需要在短时间内经常实例化,还是只创建一次

如果只需要创建一次对象,只需使用Activator.CreateInstance方法即可。如果需要在短时间内多次创建,请尝试lambda方法。最后一种方法类似于编译正则表达式与动态正则表达式。

你到底在做什么,C#可能有更好的方法通过不同的语法实现这一点。你可以使用泛型实现类似的功能,但你只是想“新建a()”做什么不起作用吗?为了获取方法名,我通常使用这两种方法,其中第二种方法只是转发给第一种方法。第一个允许从反射和延迟传递进行简单调用,第二个允许直接从代码进行简单(强类型)调用。。他们甚至没有勇气评论原因。。加上一个人..提醒一下,使用这种方法,调用代码应该是这样的:Class B=(Class)CreateObjectBy(tyepof(A));如果类型没有无参数构造函数,那么这将失败嘿,Aviad P,如果类A有参数呢?我怎样才能把它传递给对象theObject?@Benedito有一个CreateInstance重载,它接受构造函数的参数:是的,我看到了。但在这之后,我发现了另一个问题。类有方法。我想在创建实例的方法中使用其中一个。但是VisualStudio指出了一个编译错误,说明“对象”没有这样的方法。你知道怎么解决吗?或者一个我可以找的地方?给那些不知道T:new()在哪里的人
public static T CreateInstance<T>() where T: new()
{
    // Do some business logic
    Logger.LogObjectCreation(typeof(T));

    // Actualy instanciate the object
    return new T();
}
var employee = CreateInstance<Employee>();
public static object CreateInstance(Type type)
{
    // Do some business logic
    Logger.LogObjectCreation(type);

    // Actualy instanciate the object
    return Activator.CreateInstance(type);
}
var instance = CreateInstance(someType);