Если вы дадите код, который на самом деле скомпилирован, я подозреваю, что он просто закончится с SystemA
сохранением ссылки на null
- потому что это значение B
при построении A
.
Наличие двух классов, которым нужна ссылка друг на друга, определенно является запахом кода, но вы просто не можете заставить их оба ссылаться друг на друга, если только один из них не создает другой и не передает " это ", например
class SystemA
{
private readonly SystemB systemB;
public SystemA()
{
systemB = new SystemB(this);
}
}
class SystemB
{
private readonly SystemA systemA;
public SystemB(SystemA systemA)
{
this.systemA = systemA;
}
}
Теперь, если вам понадобится доступ к обоим значениям впоследствии, вы можете либо поместить свойство в одно из них, дающее доступ к другому, либо (и это действительно противно) использовать параметр out
в конструктор:
public SystemA(out systemB)
{
systemB = new SystemB(this);
this.systemB = systemB;
}
Тогда назовите это как:
SystemB b;
SystemA a = new SystemA(out b);
Пожалуйста, не делайте этого.