Я немного загнал себя в угол. Вот упрощенная версия того, что у меня есть (в C #):
class OuterClass
{
private class BadClass
{
private int Data;
public BadClass()
{
Data = 0;
...
}
}
T Build<T>(Object Input)
{
T x = new T();
...
return x;
}
void SomeMethod()
{
BadClass a = Build<BadClass>(anObject);
...
}
...
}
Проблема, с которой я столкнулся, заключается в том, что теперь я должен изменить начальное значение Data в зависимости от экземпляра OuterClass, который создает экземпляр BadClass. Обычно я просто использовал бы конструктор BadClass, который принимает параметр:
public BadClass(int Data)
{
this.Data = Data;
...
}
Но я использую BadClass в нескольких универсальных типах, поэтому у меня должен быть конструктор BadClass без параметров. Жаль, что я не могу сделать что-то вроде этого:
Build<BadClass(5)>(anObject);
Итак, как я могу предоставить информацию времени выполнения конструктора, когда я не могу передать параметры в конструктор?
Можно ли создать экземпляр времени выполнения типа BadClass, предоставить ему необходимую информацию, а затем использовать ее в моих универсальных типах?
РЕДАКТИРОВАТЬ: Я использовал List в качестве примера универсального типа, но это не полностью выразить глубину моей дилеммы ...
Я могу создать тест в Build для вызова функции инициализации, если я работаю с BadClass, но это очень глупо. Я надеюсь найти немного менее уродливый способ сделать это.