【发布时间】:2012-03-11 03:05:08
【问题描述】:
在 C# 中,我能否以相当简洁的方式向委托传递类构造函数的参数列表?
我知道这是非常特殊的情况,可能看起来有点奇怪,也不是工厂模式。如果它有助于将其视为挑战。这个问题的正确答案可能是不可能。
Func<MyClassConstructionArgsType, MyClass> make_MyClass =
args => {return new MyClass(args);};
var n = make_MyClass(comma separated arguments);
我还需要不要有参数描述的副本,例如以下不是解决方案:
Func<int, string, MyClass> make_MyClass =
(a, b) => {return new MyClass(a, b);};
或者,出于同样的原因:
Class Args
{
...
}
Func<Args, MyClass> make_MyClass =
a => {return new MyClass(a);};
var n = make_MyClass(Args(args));
Dito 是这种情况:
var n = make_MyClass<MyClass>(comma separated arguments);
Object[]{逗号分隔参数}方法很好,除了还需要支持可选参数。
这个问题是根据 Anastasiosyal 对以下问题的回答创建的:c# class reference as opposed to instance reference
Josh 第一个答案似乎在 C# 中尽可能接近。
【问题讨论】:
-
匿名投票者请使用 cmets,先回答或编辑。
-
我没有投反对票,但请参阅this post for more info
-
您要求的不是特别清楚。您能否举例说明您喜欢它如何工作,也许我们可以从那里开始?另外,您要解决的根本问题是什么?我认为这与您最后一个问题中令人讨厌的类嵌套有关。我当然会用你给出的后两个例子之一来回答。为什么它们不合适?
-
第一个示例显示了我希望它如何工作,在定义“make_MyClass”之后,然后“var n = make_MyClass(逗号分隔的参数);”可以使用,例如它可以是“var n = make_MyClass(4, "abc");”,但在帖子中列出的附加要求是不要重复有关委托声明中的参数的信息。
-
听起来你太努力避免使用 ConstructorInfo.Invoke()。这需要一个对象[]。
标签: c# class delegates constructor arguments