Я пытаюсь построить некоторые объекты в разумно общей форме. Некоторые из объектов имеют параметры конструктора, другие - нет.Передача и выполнение функций с различными сигнатурами параметров
То, что я пытаюсь достичь, - это вернуть какую-то функцию строителя, к которой я могу предоставить параметр конструктора, если это необходимо.
Я знаю, что у меня могут быть необязательные параметры переданные вниз, но в моем реальном сценарии есть несколько уровней, и я ненавижу добавлять необязательные параметры вниз по иерархии.
Я не слишком занимаюсь частичным применением/каррированием, но могу ли я использовать это здесь, и если да, то как?
Вот несколько примеров кода, который не сработает, чтобы попытаться объяснить немного больше того, что мне нужно.
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
Если вам это удастся, отправьте свой код – netaholic