【发布时间】:2015-11-30 09:37:31
【问题描述】:
我正在尝试以一种相当通用的方式构造一些对象。有些对象有构造函数参数,有些则没有。
我想要实现的是返回某种构建器函数,如果需要,我可以向其提供构造函数参数。
我知道我可以传递可选参数,但在我的实际场景中,有几个层,我不愿意在层次结构中添加可选参数。
我对部分应用程序/currying 不太感兴趣,但我可以在这里使用它吗?如果可以,如何使用?
这里有一些示例代码 - 不起作用 - 尝试更多地解释我所追求的。
public void Main()
{
dynamic buildClass = ClassBuilder<BaseClass>(true);
// ideally I'd like to be able to supply the constructor data
// here
var theClass = buildClass(???)
}
public Func<???, TClass> ClassBuilder<TClass>(bool flag) where TClass : BaseClass
{
// obviously this won't work since the delegates have different
// signatures
if (flag) return () => GetClassA();
return (x) => GetClassB(x);
}
public object GetClassA()
{
return new ClassA();
}
public object GetClassB(string param)
{
return new ClassB(param);
}
public class BaseClass {}
public class ClassA : BaseClass {}
public class ClassB : BaseClass
{
private string _param;
public ClassB(string param)
{
_param = param;
}
}
很多感谢
S
【问题讨论】:
-
如果你能做到,请发布你的代码
标签: c# generics functional-programming currying