|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Хочу в классе хранить коллекцию. Раньше всегда выбирал конкретный тип - список, словарь и т. п. А сейчас вдруг задумался - может, лучше указывать что-нибудь универсальное, типа IEnumerable? Ну, выбрал IEnumerable. В конструкторе присваиваю переменной этой коллекции экземпляр списка. Но столкнулся с тем, что теперь при обращении к этой коллекции, когда я, например, хочу заполнить её элементами через последовательное добавление этих элементов (как Add в списке), я должен привести её к конкретному типу. Т. е. если хочу добавлять элементы через Add, то надо приводить к списку и затем вызывать Add. В связи с этим возникла догадка, что я неправильно использую интерфейс. Т. е. получается, что данные хранить лучше не в интерфейсных типах, а в конкретных. А интерфейсные типы использовать, например, в параметрах функций для их, функций, большей универсальности. И вообще, интерфейс IEnumerable нужен не для редактирования элементов, а для их чтения через какой-нибудь foreach. Т. е., если где-то в функции идёт последовательная обработка элементов коллекции, то IEnumerable как раз подойдёт в качестве типа параметра. Правильно я рассуждаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 08:13 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Местами близко к правде, но в целом ахинея. Прочитай какую-нибудь теорию по ООП, где рассказывается про назначение классов и интерфейсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 08:51 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Т. е. получается, что данные хранить лучше не в интерфейсных типах, а в конкретных IEnumerable<T> не рассматривал? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 09:18 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Antonariy...в целом ахинея. Прочитай какую-нибудь теорию по ООП...+1 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 09:19 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Нужен Add используйте соответствующий интерфейс. http://msdn.microsoft.com/ru-ru/library/63ywd54z.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 09:45 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320, Надо различать реализацию и интерфейс класса. Внутри класса надо работать с тем, что удобнее: словарь, список и т.д. А вот принимать на вход и отдавать на выход можно и интерфейсами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 10:04 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
SolYUtoruser7320, Надо различать реализацию и интерфейс класса. Внутри класса надо работать с тем, что удобнее: словарь, список и т.д. А вот принимать на вход и отдавать на выход можно и интерфейсами. Ну да, это я и имел ввиду. А "принимать" и "отдавать" можно же только функциями (в которые входят и конструкторы)? Вот я и говорю, что использовать интерфейсы лучше в параметрах функций, а хранить данные - не в интерфейсах, а в конкретных типах. Изопропилuser7320Т. е. получается, что данные хранить лучше не в интерфейсных типах, а в конкретных IEnumerable<T> не рассматривал? Так я изначально его и подразумевал. Про конкретику я имел ввиду List<T>, Array<T> и т. п. вместо IEnumerable<T>. skyANAAntonariy...в целом ахинея. Прочитай какую-нибудь теорию по ООП...+1 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
А какой смысл этого кода? Ведь одно из назначений интерфейса - обобщение. Т. е. чтобы я не менял код, скажем, функции (а у вас что геттер, что Add - функции) при изменении типа коллекции, с которой работает эта функция. А у вас если я у поля HarvestedFoods заменю тип списка на какую-нибудь другую коллекцию, где нет Add, то мне придётся и код функции Add менять. Поэтому я и говорил, что если функция использует коллекцию так, что эта функциональность покрывается интерфейсом, то надо использовать интерфейс, а если не покрывается, то использование интерфейса бессмыслено. Т. е. если я в функции перебираю элементы через foreach, то можно использовать IEnumerable, т. к. все коллекции, реализующие IEnumerable, реализуют и foreach. А если я в функции добавляю элементы по одному через Add, то тут либо другой интерфейс (ICollection, как мне правильно подсказали), либо конкретный тип коллеции, который эту функциональность реализует. Наверное, в вашем примере правильнее было бы заменить IEnumerable на ICollection, но тогда смысла в отдельной функции Add нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 10:56 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Ведь одно из назначений интерфейса - обобщение. Тебе посоветовали что-то прочитать, а не выдумывать бредни. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 11:13 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Наверное, в вашем примере правильнее было бы заменить IEnumerable на ICollection, но тогда смысла в отдельной функции Add нет.Термин инкапсуляция Вам о чём-нибудь говорит? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 11:21 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
skyANAuser7320Наверное, в вашем примере правильнее было бы заменить IEnumerable на ICollection, но тогда смысла в отдельной функции Add нет.Термин инкапсуляция Вам о чём-нибудь говорит? Вы пытаетесь скрыть реализацию добавления элемента в поле-коллекцию класса? Тогда понятно. Только всё равно, не совсем удачная реализация - если заменять тип коллеции, то и реализацию тоже придётся менять. И имеет ли смысл такая мелочная инкапсуляция? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 11:36 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320skyANAпропущено... Термин инкапсуляция Вам о чём-нибудь говорит? Вы пытаетесь скрыть реализацию добавления элемента в поле-коллекцию класса?Нет.user7320Только всё равно, не совсем удачная реализация - если заменять тип коллеции, то и реализацию тоже придётся менять.Зато ничего не надо менять в 100500 местах внешнего кода, где используется класс Hamster.user7320И имеет ли смысл такая мелочная инкапсуляция?Прочитайте комментарии в методе Add. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 11:51 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320, "данные хранить лучше не в интерфейсных типах, а в конкретных" - хранится они все равно будут в конкретных. Лучше чтоб наружу класса конкретные реализации не торчали. Если что, юзайте ICollection<T>, его достаточно в подавляющем большинстве случаев. Я предпочитаю по-дефолту отдавать иэнумерабл и менять интерфейс на более конкретный в случае необходимости, причем если перфоманс проблема в этом куске кода заведомо быть не может - использую линку. (Например метод вернул иэнумерабл, я знаю что внутри лист, а мне нужен каунт, если вопроса производительности в данном месте не стоит - оставлю инумерабл и воспользуюсь екстеншнметодом, предвосхещу - каст делать точно не надо). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 12:28 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
SolYUtoruser7320, Надо различать реализацию и интерфейс класса. Внутри класса надо работать с тем, что удобнее: словарь, список и т.д. А вот принимать на вход и отдавать на выход можно и интерфейсами. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2013, 22:20 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Хочу в классе хранить коллекцию. Раньше всегда выбирал конкретный тип - список, словарь и т. п. А сейчас вдруг задумался - может, лучше указывать что-нибудь универсальное, типа IEnumerable? Ну, выбрал IEnumerable. В конструкторе присваиваю переменной этой коллекции экземпляр списка. Но столкнулся с тем, что теперь при обращении к этой коллекции, когда я, например, хочу заполнить её элементами через последовательное добавление этих элементов (как Add в списке), я должен привести её к конкретному типу. Т. е. если хочу добавлять элементы через Add, то надо приводить к списку и затем вызывать Add. В связи с этим возникла догадка, что я неправильно использую интерфейс. Т. е. получается, что данные хранить лучше не в интерфейсных типах, а в конкретных. А интерфейсные типы использовать, например, в параметрах функций для их, функций, большей универсальности. И вообще, интерфейс IEnumerable нужен не для редактирования элементов, а для их чтения через какой-нибудь foreach. Т. е., если где-то в функции идёт последовательная обработка элементов коллекции, то IEnumerable как раз подойдёт в качестве типа параметра. Правильно я рассуждаю?Однозначного ответа нет. Всё зависит от задачи и настроения. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2013, 07:08 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user 7320 Ну, выбрал IEnumerable. В конструкторе присваиваю переменной этой коллекции экземпляр списка. Но столкнулся с тем, что теперь при обращении к этой коллекции, когда я, например, хочу заполнить её элементами через последовательное добавление этих элементов (как Add в списке), я должен привести её к конкретному типу. Т. е. если хочу добавлять элементы через Add, то надо приводить к списку и затем вызывать Add. Основное назначение интерфейсов описание сигнатур и поддержка отношения композиции. Поэтому фраза в этом контексте не корректна, для вызова соответствующего метода экземпляра списка (на пример Add) достаточно проверить поддерживает ли класс реализацию интерфейса ( на пример IEnumerable). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2013, 11:21 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
skyANAAntonariy...в целом ахинея. Прочитай какую-нибудь теорию по ООП...+1 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Тогда вот ещё такой вопрос по этому коду и вообще. В методах класса лучше использовать геттеры и сеттеры для полей-данных класса, или сами эти поля-данные? Ну, т. е. конкретно в этом примере понятно, что по смыслу надо использовать harvestedFoods вместо HarvestedFoods. А вообще? Есть ли смысл использовать геттеры и сеттеры внутри класса, или они только для внешних клиентов? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 12:15 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
И ещё вопрос по коду Скайана. Будет лучше или хуже, если вместо Код: c# 1.
сделать Код: c# 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 12:35 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
1. Локальные проперти - это маразм. 2. Зачем тебе в реализации понижаться до IEnumerable? Ещё не понял разницу между реализацией и интерфейсами? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 12:54 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320, что касается моего примера, то вполне очевидно, что Вы не можете использовать свойство HarvestedFoods вместо переменной harvestedFoods, также Вы не можете изменить тип переменной harvestedFoods на IEnumerable<Food>. На IList<Food> и даже на ICollection<Food> можете, а вот на IEnumerable<Food>. Почему? Предлагаю Вам самостоятельно ответить на этот вопрос. Пример-то проще некуда. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 13:01 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
МСУ1. Локальные проперти - это маразм.ТС не про локальные спрашивал, а:user7320Есть ли смысл использовать геттеры и сеттеры внутри класса, или они только для внешних клиентов? Отвечу. Есть. Геттер или сеттер может содержать какую-то логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 13:09 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Grigory_RОсновное назначение интерфейсов описание сигнатур и поддержка отношения композиции.Композиция классов не получится? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 17:14 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
skyANAМСУ1. Локальные проперти - это маразм.ТС не про локальные спрашивал, а:user7320Есть ли смысл использовать геттеры и сеттеры внутри класса, или они только для внешних клиентов? Отвечу. Есть. Геттер или сеттер может содержать какую-то логику.А если логика не нужна? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 17:16 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... ТС не про локальные спрашивал, а:пропущено... Отвечу. Есть. Геттер или сеттер может содержать какую-то логику.А если логика не нужна? на проперти можно поставить точку останова, на филде нет ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 17:35 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
если есть проперти то доступ к полю даже изнутри класса только через него ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2013, 17:56 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Denis.если есть проперти то доступ к полю даже изнутри класса только через него Это утверждение или рекомендация? Если первое, то это неправда. А если второе, то почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2013, 15:49 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Ну, вот я только могу представить, если свойства содержат логику валидации полей, как в MVVM через IDataErrorInfo, то, пожалуй, стоит даже внутри класса к полям через свойства обращаться, если могут быть какие-то изменения этих полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2013, 15:53 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
pationАлексей Кпропущено... А если логика не нужна? на проперти можно поставить точку останова, на филде нетЕсли захочется, поле всегда можно преобразовать в свойство. Главное, чтобы была возможность перекомпилировать вызывающий код. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:49 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Denis.если есть проперти то доступ к полю даже изнутри класса только через него Это утверждение или рекомендация? Если первое, то это неправда. А если второе, то почему? потому как когда захотите добавить логику или поставить брейкпоинт будете все юзаджи поля в классе искать ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:10 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
авторесли есть проперти то доступ к полю даже изнутри класса только через него С моей точки зрения, не более чем пожелание. Были у меня случаи, когда приходилось убирать обращение к свойству и менять на обращение к полю. Просто необходимо помнить, что обращение к свойству это вызов метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 18:18 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Denis.user7320пропущено... Это утверждение или рекомендация? Если первое, то это неправда. А если второе, то почему? потому как когда захотите добавить логику или поставить брейкпоинт будете все юзаджи поля в классе искатьЧто нужно искать? Было так: Код: c# 1.
Стало так: Код: c# 1.
Или так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Достаточно перекомпилировать вызывающий код. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 05:48 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Вобщем, как и почти всегда, вы не даёте конкретного ответа (вздыхает). Как я понял, для каждого случая лучше что-то своё. Нужно каждый раз анализировать ситуацию. Общего правила нет... Вот так и утекает время и внимание на мелочи (вздыхает). ...(вздыхает ещё раз) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 08:48 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Вобщем, как и почти всегда, вы не даёте конкретного ответа (вздыхает). Как я понял, для каждого случая лучше что-то своё. Нужно каждый раз анализировать ситуацию. Общего правила нет...КО. Многое зависит от Вашей предметной области. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 09:05 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
А вообще есть S.O.L.I.D., есть ООА и ООП. Познакомьтесь с ними, а потом будете думать, что конкретно применить в конкретной ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 09:09 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
skyANAА вообще есть S.O.L.I.D., есть ООА и ООП. Познакомьтесь с ними, а потом будете думать, что конкретно применить в конкретной ситуации.+ SRP и DRY. Но самое интересное начинается когда эти принципы противоречат друг с другу. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 09:45 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Алексей К, конструкция "public int MyValue;" - для меня вообще загадочна. Допустим есть проперти с паблик сеттером, допустим вы извне меняете естественно через сеттер, а изнутри класса меняете через поле. У вас в проперти инвалид значение и вы хотите поставить брейкпоинт чтобы поглядеть колстек. Что будете делать? И почему сразу изнутри класса не юзать гетеры сетеры?(про вырожденные случаи не надо). Вообще вопрос настолько очевидный, что его даже как-то странно обсуждать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 13:43 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Вобщем, как и почти всегда, вы не даёте конкретного ответа (вздыхает). Как я понял, для каждого случая лучше что-то своё. Нужно каждый раз анализировать ситуацию. Общего правила нет... Вот так и утекает время и внимание на мелочи (вздыхает). ...(вздыхает ещё раз) я дал правильный ответ :) делай так чтобы торчали интерфейсы, желательно наиболее общего типа, достаточные для того чтобы предоставить необходимый контракт с одной стороны и скрыть реализацию внутри класса с другой. Внутри класса конструкции вида IList<string> list = new List<string>() теоретически смысл имеют, но практика показывает что смысл этот стремится к 0. В большинстве случаев контракт коллекции торчащий наружу должен быть ienumerable<t> ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 13:52 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Denis.Алексей К, конструкция "public int MyValue;" - для меня вообще загадочна. Допустим есть проперти с паблик сеттером, допустим вы извне меняете естественно через сеттер, а изнутри класса меняете через поле.Где было предложено менять снаружи через сеттер, а внутри через поле? Я такого не помню. Denis.У вас в проперти инвалид значение и вы хотите поставить брейкпоинт чтобы поглядеть колстек. Что будете делать? И почему сразу изнутри класса не юзать гетеры сетеры?(про вырожденные случаи не надо).Что мешает оперативно преобразовать поле в свойство? Вызывающему коду вроде Код: c# 1.
всё равно, поле это или свойство. Изменять его не придётся. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 14:33 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Denis.делай так чтобы торчали интерфейсыТорчащий наружу IEnumerable может выйти боком в условиях многопоточности. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 14:35 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Алексей КТорчащий наружу IEnumerable может выйти боком в условиях многопоточности. В условиях многопоточности выйти боком могут гораздо более простые вещи. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 14:37 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Алексей К, так о том речь и шла по моему пониманию - юзать ли уже существующие проперти внутри класса через методы или через поля? Я утверждаю что по-умолчанию через методы(геторы сеторы) Про многопоточность - это совсем отдельная песня. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 14:49 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Алексей КDenis.делай так чтобы торчали интерфейсыТорчащий наружу IEnumerable может выйти боком в условиях многопоточности. Блин, я уже сделал айэнумерейбл! А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 14:50 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Торчащий наружу IEnumerable может выйти боком в условиях многопоточности. Блин, я уже сделал айэнумерейбл! А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему? Не тронь! Оставь как сделал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 14:52 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Denis.Алексей К, конструкция "public int MyValue;" - для меня вообще загадочна. Допустим есть проперти с паблик сеттером, допустим вы извне меняете естественно через сеттер, а изнутри класса меняете через поле. У вас в проперти инвалид значение и вы хотите поставить брейкпоинт чтобы поглядеть колстек. Что будете делать? И почему сразу изнутри класса не юзать гетеры сетеры?(про вырожденные случаи не надо). Вообще вопрос настолько очевидный, что его даже как-то странно обсуждать. Ну, выше же говорили про производительность, что это лишний вызов метода, который где-то на порядок медленнее прямого обращения к полю (судя по старым тестам ещё времён фреймворк 1-1.1, может, 2). Поэтому, скажем, обращение к полю через геттер внутри класса лучше всё же заменить на прямое обращение к полю в задачах, где слишком много таких обращений (всякие итерации по сассивам и пр.). Правильно я говорю, да? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 14:59 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320, нет. Почти все неправильно. Забудь об этом и не вспоминай:). Я серьезно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 15:01 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Торчащий наружу IEnumerable может выйти боком в условиях многопоточности. Блин, я уже сделал айэнумерейбл! А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему? Здесь http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx и здесь http://msdn.microsoft.com/en-us/library/9eekhta0.aspx вообще ничего про потоки не написано (искал по "thre" по странице). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 15:02 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Торчащий наружу IEnumerable может выйти боком в условиях многопоточности. Блин, я уже сделал айэнумерейбл! А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?Наружу торчит Enumerable. Вы не знаете что за коллекция за ним скрыта. Делаете по ней foreach. При этом оказывается, что это List, в который добавляет элементы другой поток. Если наружу торчит что-то неизменяемое (массив, ReadOnlyCollection и т. п.) как-то спокойнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 15:13 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320пропущено... Блин, я уже сделал айэнумерейбл! А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?Наружу торчит Enumerable. Вы не знаете что за коллекция за ним скрыта. Делаете по ней foreach. При этом оказывается, что это List, в который добавляет элементы другой поток. Если наружу торчит что-то неизменяемое (массив, ReadOnlyCollection и т. п.) как-то спокойнее. Ну, наверное есть же какие-нибудь механизмы, которые могут извещять всякий поток, работающий с коллекцией, что другой поток в данный момент изменяет её? Или, даже если и есть такие механизмы, то они ничего не дадут? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 15:55 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Ну, наверное есть же какие-нибудь механизмы, которые могут извещять всякий поток, работающий с коллекцией, что другой поток в данный момент изменяет её? Или, даже если и есть такие механизмы, то они ничего не дадут? С многопоточностью халявы не бывает. Обеспечение потокобезопасности приложения полностью на совести разработчика приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 16:56 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320пропущено... Блин, я уже сделал айэнумерейбл! А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?Наружу торчит Enumerable. Вы не знаете что за коллекция за ним скрыта. Делаете по ней foreach. При этом оказывается, что это List, в который добавляет элементы другой поток. Если наружу торчит что-то неизменяемое (массив, ReadOnlyCollection и т. п.) как-то спокойнее. Бред сивой кобылы опасного ковбоя ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 21:09 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Если в методе торчит иенумарабле, неизвестно, что там в реализации. Может оказаться, что метод аккуратно форматирует жесткий диск. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 21:11 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
user7320Ну, выше же говорили про производительность, что это лишний вызов метода, который где-то на порядок медленнее прямого обращения к полю (судя по старым тестам ещё времён фреймворк 1-1.1, может, 2). Поэтому, скажем, обращение к полю через геттер внутри класса лучше всё же заменить на прямое обращение к полю в задачах, где слишком много таких обращений (всякие итерации по сассивам и пр.). Правильно я говорю, да?Почему тогда не писать сразу на ассемблере, если производительность так критична? Не стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности. http://ericlippert.com/2012/12/17/performance-rant/ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 07:03 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
enigmaticПочему тогда не писать сразу на ассемблере, если производительность так критична? Не стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности. http://ericlippert.com/2012/12/17/performance-rant/ А зачем тормозить на ровном месте? Если Сишарп не самый быстрый язык в мире, это не значит, что нужно делать его медленнее, чем он есть. И если у меня какой-то метод слишком много обращается к полям своего класса, то почему бы сразу не сделать обращение к этим полям непосредственным, а не через геттеры? Сразу, а не после тестирования производительности и обнаружения очевидных просадок на тех местах, где вы их и ожидали ещё при написании кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 07:52 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
авторА зачем тормозить на ровном месте? Если Сишарп не самый быстрый язык в мире, это не значит, что нужно делать его медленнее, чем он есть.Что значит "медленный"? Если вам важна скорость, почему вы не пишите на Асме/C/C++? авторИ если у меня какой-то метод слишком много обращается к полям своего класса, то почему бы сразу не сделать обращение к этим полям непосредственным, а не через геттеры?Если есть просадка - обращайтесь. Разве я написал обратное? авторНе стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности. авторСразу, а не после тестирования производительности и обнаружения очевидных просадок на тех местах, где вы их и ожидали ещё при написании кода.Вместо того чтобы фокусироваться на мелочах лучше сфокусироваться на решении своей задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 08:17 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
enigmaticНе стоит заморачиваться на этих мелких оптимизацияхСтоит. Не считая того, что появляется привычка сразу писать максимально эффективный код, много мелких оптимизаций дают ощутимый прирост производительности системы в целом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 09:47 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
AntonariyСтоит. Не считая того, что появляется привычка сразу писать максимально эффективный код, много мелких оптимизаций дают ощутимый прирост производительности системы в целом.Не стоит выдирать фразу из контекста. Если код занимается только доступом к данным класса через поля/свойства, то да. Иначе - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 09:57 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
enigmaticНе стоит выдирать фразу из контекста. Если код занимается только доступом к данным класса через поля/свойства, то да. Иначе - нет.А код который занимается только доступом к данным класса через поля/свойства никому не нужен. авторСтоит. Не считая того, что появляется привычка сразу писать максимально эффективный код, много мелких оптимизаций дают ощутимый прирост производительности системы в целом.Стоит интересоваться мелкими оптимизациями. И в то же время не стоит их делать. Почему вы думаете, что пишете максимально эффективный код? Почему вы считаете, что много мелких оптимизаций дадут ощутимый прирост производительности системы в целом? Как влияет количество мелких оптимизаций на ощутимый прирост производительности? Насколько он ощутимый? Вы учитываете количество времени, которое тратите для этих оптимизаций? Стоит ли оно того? http://ericlippert.com/2012/12/17/performance-rant/ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 10:13 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Компилятор (если компилировать с оптимизацией, например в Release версии), заменяет геттеры на inline код: http://www.ademiller.com/blogs/tech/2008/08/c-inline-methods-and-optimization/ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 10:15 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
enigmaticПочему вы думаете, что пишете максимально эффективный код?Потому что я знаю разные приемы по оптимизации и использую их. enigmaticПочему вы считаете, что много мелких оптимизаций дадут ощутимый прирост производительности системы в целом?Я не "считаю", это факт. enigmaticКак влияет количество мелких оптимизаций на ощутимый прирост производительности?Молча. enigmaticНасколько он ощутимый?На глаз. enigmaticВы учитываете количество времени, которое тратите для этих оптимизаций?Я не трачу время на написание не оптимального кода, чтобы потом тратить время на его оптимизацию, я пишу оптимально сразу. И я не трачу время на обдумывание, потому что знаю заранее, как оптимальней.enigmaticСтоит ли оно того?Оно мне бесплатно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 10:35 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Antonariy, Окей. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 10:40 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
Демагоги ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 10:41 |
|
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
|
|||
---|---|---|---|
#18+
enigmaticНе стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности. в частности, тут было это: какое приложение быстрее х86 или х64. маленькое исследование ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 11:28 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1404986]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 183ms |
0 / 0 |