Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Как это сделать в С#  [new]
Cheblin
Member

Откуда: Beijing
Сообщений: 107
      class Program
    {
        static void Main(string[] args)
        {
           Debug.Print( (bar._foo == null) + "\n");
           Debug.Print( (foo._bar == null).ToString());
            int i = 34;
        }

        static readonly Bar bar = new Bar(foo);
        static readonly Foo foo = new Foo(bar);
    }

    class Bar
    {
        public readonly Foo _foo;

        public Bar(Foo foo)
        {
            _foo = foo;
        }
    }

    class Foo
    {
        public readonly Bar _bar;

        public Foo(Bar bar)
        {
            _bar = bar;
        }
    }


Это допустимый в С# код, но не рабочий.

bar._foo всегда null. понятно, что это связано с очередностью инициализации.

на С подобное, с небольшими доп усилиями реализуемо.
на JAVA даже Не компилируется. обязательно нужна функция которая будет все правильно сшивать
на Rust работает, как и ожидается, правильно.

вопрос как бы это сделать наC#

без использования дополнительных функций "постсшивния"

приведенный пример рафинированный, максимально упрощенный, сконструированный исключительно только для понимания того что нужно сделать.
В реальности есть гигантская структура иерархических, статических [b]READ ONLY[/b] данных по которым нужно максимально быстро перемещаться и выдергивать данные.
5 сен 18, 06:05    [21664952]     Ответить | Цитировать Сообщить модератору
 Re: Как это сделать в С#  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20536
Код, в котором есть взаимная зависимость классов друг от друга, очень плохо пахнет.

Cheblin
исключительно только для понимания того что нужно сделать
понимание не наступило
5 сен 18, 06:11    [21664953]     Ответить | Цитировать Сообщить модератору
 Re: Как это сделать в С#  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5099
Cheblin
вопрос как бы это сделать наC#

без использования дополнительных функций "постсшивния"

Никак.
5 сен 18, 06:58    [21664960]     Ответить | Цитировать Сообщить модератору
 Re: Как это сделать в С#  [new]
Cheblin
Member

Откуда: Beijing
Сообщений: 107
очень плохо пахнет.

class Parent
    {
        Child children[];
    }

class Child
    {
        Parent parent;
    }


чем пахнет?
5 сен 18, 07:01    [21664961]     Ответить | Цитировать Сообщить модератору
 Re: Как это сделать в С#  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20536
Cheblin
чем пахнет?
ошибками синтаксиса

    interface INode {}

    class Parent : INode
    {
        INode[] children;
    }

    class Child : INode
    {
        INode parent;
    }
5 сен 18, 07:05    [21664962]     Ответить | Цитировать Сообщить модератору
 Re: Как это сделать в С#  [new]
Cheblin
Member

Откуда: Beijing
Сообщений: 107
это совершенно условный код.
очевидно что во взаимной связи классов нет ничего плохого.
5 сен 18, 07:13    [21664968]     Ответить | Цитировать Сообщить модератору
 Re: Как это сделать в С#  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20536
Cheblin
очевидно что во взаимной связи классов нет ничего плохого.
Очевидно, что земля плоская, потому что если бы она была шарообразная, с нее бы все падали.
5 сен 18, 08:15    [21664995]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить