通过通用方式创建任何C#类的intance

我想使用generics创建任何类的实例。 那可能吗?

我试过这个但是没有用:

public class blabla { public void bla(); } public class Foo { Dictionary<string, Func> factory; public Foo() => factory = new Dictionary<string, Func>(); public WrapMe(string key) => factory.Add(key, () => new T()); } ... var foo = new Foo(); foo.Wrapme("myBlabla"); var instance = foo.factory["myBlabla"]; instance.Bla(); 

你只需要一个方法:

 private static T InstantiateInstance() where T : new() => new T(); 

有两种方法可以解决这个问题:

变体1where T : new()类定义中添加where T : new()

 public class Foo where T : new() { ... } 

有关更多详细信息,请参阅new()约束的说明 。


变体2 :将lambda () => new T()作为参数传递给构造函数,将其存储在Func字段中并在WrapMe使用它。

有关详细信息,请参阅此博客文章

您可以使用Activator.CreateInstance()

使用Inversion of Control容器 ,如Castle Windsor 。

在声明Foo时需要使用新约束。 这仅适用于具有不带参数的构造函数的类型 – 在您的情况下这很好。