Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Австрал
79 / 57 / 11
Регистрация: 16.12.2013
Сообщений: 175
#1

Что это было? public Foo MyFoo { get; set; } // в не абстрактном классе, не абстрактное

25.01.2014, 10:19. Просмотров 1958. Ответов 45
Метки нет (Все метки)

Вобщем, жили мы долго и счастливо, сначала на С++ потом на С#, но на С# писали код имея в виду, что, может, он пригодится в старых проектах на С++, т.е. консервативно. Типы переменных все объявляли явно, LINQ только там где он вправду нужен.

И вот является товарищ из Ирана с опытом на JS и давай писать везде var. Ну, думаю, ладно, пианист играет как умеет, а этот код, вроде, на С++ никогда не надо будет переводить.

А вчера гляжу его код и вижу такую, блин, конструкцию...

C#
1
2
3
4
5
6
class A{
  public List<TypeBar> Bar{ get; set; }
 
// тут нет конструктора, то есть, все равно, что есть конструктор public A(){}
 
}
Класс не абстрактный, член не абстрактный. А компилятор это спокойно ест.
Дальше еще хуже...

В коде, который пользует этот класс:

C#
1
2
3
4
5
...
var bar = GetBar(); // Эта функция возвращает значение типа List<TypeBar> - все честно
...
// А дальше тихий ужас
var a = new A { Bar = bar; }
Че это за фигня? Компилятор создает в полете новый конструктор, который еще и видит местные переменные? Че делать? Ну, или:

C#
1
2
3
4
5
6
7
8
9
class A{
public TypeBar Bar;
}
 
// И
class A {
public TypeBar Bar { get; set; } 
// Это одно и то же или нет??? Компилятор одинаковый код генерирует, или нет???
}
Заранее спасибо.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 10:19
Ответы с готовыми решениями:

Клонирование в абстрактном классе
Есть абстрактный класс с полями и методом клон, и два потомка со своими полями....

Константа в абстрактном классе
Добрый день! Может быть кто знает, есть ли метод, которым можно гарантировать,...

Интерфейс в абстрактном классе
Есть у меня абстрактный класс Figure, от которого наследуются Circle, Romb,...

Передача параметра в абстрактном классе
В задании нужно написать абстрактный класс n-мерный вектор. Суть в том, что я...

Массив структур в абстрактном классе
Объясните пожалуйста на пальцах, почему возникает ошибка namespace...

45
Grishaco
435 / 359 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
31.01.2014, 23:54 #41
Цитата Сообщение от Psilon Посмотреть сообщение
Grishaco, еще раз: удвоение места. То есть при добавлении 9гоэ лемента будет расширен до 16ти, иначе при 1кк элементов было бы 1кк/4= 250к аллокаций памяти, что убило бы производительность в ноль, а так имеем log(1kk) = 20 аллокаций.
Ваша правда.

Цитата Сообщение от Psilon Посмотреть сообщение
посмотрите сами, при сериализации он сериализовал в элементы с key и value соответствующими. Достаточно посмотреть, что поля одноименны с соответствующими значениями в xml файле.
На сколько я знаю, приватные поля не сериализуются в XML. Совпадение имен еще ни о чем не говорит. Ну если это только не ветка if в сериализаторе для листа от microsoft.
0
Psilon
Master of Orion
Эксперт .NET
5989 / 4842 / 901
Регистрация: 10.07.2011
Сообщений: 14,459
Записей в блоге: 5
Завершенные тесты: 4
01.02.2014, 00:36 #42
Grishaco, еще раз. Вы видите, во что сериализовался List. После этого как-то его нужно десериализовать. Вопрос: какие именно поля list'а будут восстанавливаться по этому файлу, ваши альтернативы?
0
Grishaco
435 / 359 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.02.2014, 00:58 #43
Psilon, ваша правда, вопрос только в том, что все описанное вами верно только в рамках NET, в любом другом случае (я имею в виду обмен данными с другими системами), не возможно использовать NetDataContractSerializer, а приходится использовать XmlSerializer, который в свою очередь, не только не сериализует коллекции, но и внутренние поля.
0
Psilon
Master of Orion
Эксперт .NET
5989 / 4842 / 901
Регистрация: 10.07.2011
Сообщений: 14,459
Записей в блоге: 5
Завершенные тесты: 4
01.02.2014, 01:19 #44
Grishaco, .Net работает исключительно с .Net, за исключением С\С++, где он работает с сырыми структурами данных, со структурами (извиняюсь за тавтология). Другие среды и соглашения не слишком интересуют. Все-таки основным межсетевым соглашением в .Net является WCF, от него и танцуем.

В заключение: свойства принципиально отличаются от полей тем, что свойства - это пара методов, когда как поля - это просто поля.
0
Wolfdp
766 / 725 / 187
Регистрация: 15.06.2012
Сообщений: 2,844
Записей в блоге: 1
Завершенные тесты: 1
03.02.2014, 13:09 #45
Столько текста, и никто не упомянул, что интерфейсы могут иметь свойства, но не могу иметь поля?
0
Psilon
Master of Orion
Эксперт .NET
5989 / 4842 / 901
Регистрация: 10.07.2011
Сообщений: 14,459
Записей в блоге: 5
Завершенные тесты: 4
03.02.2014, 18:38 #46
Wolfdp, свойства это методы. Естественно, они содержатся в интерфейсе. Только мы говорили про свйоства в классах, интерфейсами тут и не пахнет. Только множественное наследование, только хардкор)
0
03.02.2014, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2014, 18:38

Поля в абстрактном классе и наследниках
Подскажите пожалуйста. Почему Age одно на двоих, можно ли сделать чтобы у...

Метод с модификатором override в абстрактном классе
проблема с override,студия 10 ругается. abstract class A{ public void...

Как организовать индексатор в абстрактном классе?
1. Есть абстрактный класс сущности Entity.cs public abstract class Entity ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru