我有一个像下面这样的类(class):
class Foo
{
public Foo(int x) { ... }
}
我需要将这样的委托(delegate)传递给某个方法:
delegate Foo FooGenerator(int x);
是否可以将构造函数作为
FooGenerator
值直接传递,而无需键入:delegate(int x) { return new Foo(x); }
?
编辑:对于我个人使用,该问题涉及.NET 2.0,但也欢迎使用3.0+的提示/响应。
最佳答案
不,CLR不允许将委托(delegate)绑定(bind)到ConstructorInfo
。
但是,您可以只创建自己的:
static T Make<T>(Action<T> init) where T : new()
{
var t = new T();
init(t);
return t;
}
用法
var t = Make<Foo>( x => { x.Bar = "bar"; x.Baz = 1; });