У меня есть простая реализация Factory в моем коде. Я стремлюсь, чтобы сконструированные объекты сохранили ссылку на фабрику, которая их создала, поэтому я подключил их примерно так:
public class Factory {
public T CreateObject<T>() where T : Foo, new()
{
return new T() {
parent = this
};
}
}
public class Foo {
internal Factory parent;
internal Foo() { }
}
Это работает во время чтения, но я подумал, что, вероятно, мне нужна эта переменная parent
, чтобы ее нельзя было изменить, если она установлена на заводе. Однако, если я объявлю это как internal readonly Factory parent;
, то фабрика не сможет больше установить его значение при строительстве.
Обычно я исправляю это, предоставляя параметризованный конструктор, но это убивает универсальную реализацию, потому что AFAIK where T : new()
подразумевает конструктор без параметров.
Может быть, мне просто не хватает нескольких шестеренок с моими чипами на C #, но как лучше всего реализовать что-то подобное? (Или было бы лучше просто отказаться от readonly
и поверить, что код не будет модифицировать parent
небезопасным образом - на ум придет NullReferenceException
---?)