Что это было? public Foo MyFoo { get; set; } // в не абстрактном классе, не абстрактное - C#
Формулировка задачи:
Вобщем, жили мы долго и счастливо, сначала на С++ потом на С#, но на С# писали код имея в виду, что, может, он пригодится в старых проектах на С++, т.е. консервативно. Типы переменных все объявляли явно, LINQ только там где он вправду нужен.
И вот является товарищ из Ирана с опытом на JS и давай писать везде var. Ну, думаю, ладно, пианист играет как умеет, а этот код, вроде, на С++ никогда не надо будет переводить.
А вчера гляжу его код и вижу такую, блин, конструкцию...
Класс не абстрактный, член не абстрактный. А компилятор это спокойно ест.
Дальше еще хуже...
В коде, который пользует этот класс:
Че это за фигня? Компилятор создает в полете новый конструктор, который еще и видит местные переменные? Че делать? Ну, или:
Заранее спасибо.
Листинг программы
- class A{
- public List<TypeBar> Bar{ get; set; }
- // тут нет конструктора, то есть, все равно, что есть конструктор public A(){}
- }
Листинг программы
- ...
- var bar = GetBar(); // Эта функция возвращает значение типа List<TypeBar> - все честно
- ...
- // А дальше тихий ужас
- var a = new A { Bar = bar; }
Листинг программы
- class A{
- public TypeBar Bar;
- }
- // И
- class A {
- public TypeBar Bar { get; set; }
- // Это одно и то же или нет??? Компилятор одинаковый код генерирует, или нет???
- }
Решение задачи: «Что это было? public Foo MyFoo { get; set; } // в не абстрактном классе, не абстрактное»
textual
Листинг программы
- public int x {get; set;} // Ага, это для инициализаторов, что-ли?
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д