powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
61 сообщений из 61, показаны все 3 страниц
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182427
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу в классе хранить коллекцию. Раньше всегда выбирал конкретный тип - список, словарь и т. п. А сейчас вдруг задумался - может, лучше указывать что-нибудь универсальное, типа IEnumerable?

Ну, выбрал IEnumerable. В конструкторе присваиваю переменной этой коллекции экземпляр списка. Но столкнулся с тем, что теперь при обращении к этой коллекции, когда я, например, хочу заполнить её элементами через последовательное добавление этих элементов (как Add в списке), я должен привести её к конкретному типу. Т. е. если хочу добавлять элементы через Add, то надо приводить к списку и затем вызывать Add.

В связи с этим возникла догадка, что я неправильно использую интерфейс. Т. е. получается, что данные хранить лучше не в интерфейсных типах, а в конкретных. А интерфейсные типы использовать, например, в параметрах функций для их, функций, большей универсальности. И вообще, интерфейс IEnumerable нужен не для редактирования элементов, а для их чтения через какой-нибудь foreach. Т. е., если где-то в функции идёт последовательная обработка элементов коллекции, то IEnumerable как раз подойдёт в качестве типа параметра. Правильно я рассуждаю?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182459
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Местами близко к правде, но в целом ахинея. Прочитай какую-нибудь теорию по ООП, где рассказывается про назначение классов и интерфейсов.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182491
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Т. е. получается, что данные хранить лучше не в интерфейсных типах, а в конкретных
IEnumerable<T> не рассматривал?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182492
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy...в целом ахинея. Прочитай какую-нибудь теорию по ООП...+1

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class Food
{
    // ...
}

public class Hamster
{
    private List<Food> harvestedFoods = new List<Food>();

    public IEnumerable<Food> HarvestedFoods
    {
        get { return harvestedFoods; }
    }

    public void Add(Food food)
    {
        // Тут хомяк может посолить, поперчить, проверить,
        // а не тухлая-ли еда попалась, перед тем как отложить впрок...
        harvestedFoods.Add(food); 
    }
}
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182521
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужен Add используйте соответствующий интерфейс.
http://msdn.microsoft.com/ru-ru/library/63ywd54z.aspx
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182562
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

Надо различать реализацию и интерфейс класса. Внутри класса надо работать с тем, что удобнее: словарь, список и т.д. А вот принимать на вход и отдавать на выход можно и интерфейсами.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182644
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
public class Food
{
    // ...
}

public class Hamster
{
    private List<Food> harvestedFoods = new List<Food>();

    public IEnumerable<Food> HarvestedFoods
    {
        get { return harvestedFoods; }
    }

    public void Add(Food food)
    {
        // Тут хомяк может посолить, поперчить, проверить,
        // а не тухлая-ли еда попалась, перед тем как отложить впрок...
        harvestedFoods.Add(food); 
    }
}


А какой смысл этого кода? Ведь одно из назначений интерфейса - обобщение. Т. е. чтобы я не менял код, скажем, функции (а у вас что геттер, что Add - функции) при изменении типа коллекции, с которой работает эта функция. А у вас если я у поля HarvestedFoods заменю тип списка на какую-нибудь другую коллекцию, где нет Add, то мне придётся и код функции Add менять. Поэтому я и говорил, что если функция использует коллекцию так, что эта функциональность покрывается интерфейсом, то надо использовать интерфейс, а если не покрывается, то использование интерфейса бессмыслено. Т. е. если я в функции перебираю элементы через foreach, то можно использовать IEnumerable, т. к. все коллекции, реализующие IEnumerable, реализуют и foreach. А если я в функции добавляю элементы по одному через Add, то тут либо другой интерфейс (ICollection, как мне правильно подсказали), либо конкретный тип коллеции, который эту функциональность реализует.

Наверное, в вашем примере правильнее было бы заменить IEnumerable на ICollection, но тогда смысла в отдельной функции Add нет.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182688
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Ведь одно из назначений интерфейса - обобщение. Тебе посоветовали что-то прочитать, а не выдумывать бредни.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182717
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Наверное, в вашем примере правильнее было бы заменить IEnumerable на ICollection, но тогда смысла в отдельной функции Add нет.Термин инкапсуляция Вам о чём-нибудь говорит?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182746
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320Наверное, в вашем примере правильнее было бы заменить IEnumerable на ICollection, но тогда смысла в отдельной функции Add нет.Термин инкапсуляция Вам о чём-нибудь говорит?
Вы пытаетесь скрыть реализацию добавления элемента в поле-коллекцию класса? Тогда понятно. Только всё равно, не совсем удачная реализация - если заменять тип коллеции, то и реализацию тоже придётся менять. И имеет ли смысл такая мелочная инкапсуляция?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182784
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Термин инкапсуляция Вам о чём-нибудь говорит?
Вы пытаетесь скрыть реализацию добавления элемента в поле-коллекцию класса?Нет.user7320Только всё равно, не совсем удачная реализация - если заменять тип коллеции, то и реализацию тоже придётся менять.Зато ничего не надо менять в 100500 местах внешнего кода, где используется класс Hamster.user7320И имеет ли смысл такая мелочная инкапсуляция?Прочитайте комментарии в методе Add.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182882
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

"данные хранить лучше не в интерфейсных типах, а в конкретных" - хранится они все равно будут в конкретных.
Лучше чтоб наружу класса конкретные реализации не торчали. Если что, юзайте ICollection<T>, его достаточно в подавляющем большинстве случаев. Я предпочитаю по-дефолту отдавать иэнумерабл и менять интерфейс на более конкретный в случае необходимости, причем если перфоманс проблема в этом куске кода заведомо быть не может - использую линку. (Например метод вернул иэнумерабл, я знаю что внутри лист, а мне нужен каунт, если вопроса производительности в данном месте не стоит - оставлю инумерабл и воспользуюсь екстеншнметодом, предвосхещу - каст делать точно не надо).
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38182949
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtoruser7320,

Надо различать реализацию и интерфейс класса. Внутри класса надо работать с тем, что удобнее: словарь, список и т.д. А вот принимать на вход и отдавать на выход можно и интерфейсами.
+1
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38183146
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Хочу в классе хранить коллекцию. Раньше всегда выбирал конкретный тип - список, словарь и т. п. А сейчас вдруг задумался - может, лучше указывать что-нибудь универсальное, типа IEnumerable?

Ну, выбрал IEnumerable. В конструкторе присваиваю переменной этой коллекции экземпляр списка. Но столкнулся с тем, что теперь при обращении к этой коллекции, когда я, например, хочу заполнить её элементами через последовательное добавление этих элементов (как Add в списке), я должен привести её к конкретному типу. Т. е. если хочу добавлять элементы через Add, то надо приводить к списку и затем вызывать Add.

В связи с этим возникла догадка, что я неправильно использую интерфейс. Т. е. получается, что данные хранить лучше не в интерфейсных типах, а в конкретных. А интерфейсные типы использовать, например, в параметрах функций для их, функций, большей универсальности. И вообще, интерфейс IEnumerable нужен не для редактирования элементов, а для их чтения через какой-нибудь foreach. Т. е., если где-то в функции идёт последовательная обработка элементов коллекции, то IEnumerable как раз подойдёт в качестве типа параметра. Правильно я рассуждаю?Однозначного ответа нет. Всё зависит от задачи и настроения.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38183445
Grigory_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user 7320 Ну, выбрал IEnumerable. В конструкторе присваиваю переменной этой коллекции экземпляр списка. Но столкнулся с тем, что теперь при обращении к этой коллекции, когда я, например, хочу заполнить её элементами через последовательное добавление этих элементов (как Add в списке), я должен привести её к конкретному типу. Т. е. если хочу добавлять элементы через Add, то надо приводить к списку и затем вызывать Add.

Основное назначение интерфейсов описание сигнатур и поддержка отношения композиции. Поэтому фраза
в этом контексте не корректна, для вызова соответствующего метода экземпляра списка (на пример Add) достаточно
проверить поддерживает ли класс реализацию интерфейса ( на пример IEnumerable).
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38185377
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAAntonariy...в целом ахинея. Прочитай какую-нибудь теорию по ООП...+1

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class Food
{
    // ...
}

public class Hamster
{
    private List<Food> harvestedFoods = new List<Food>();

    public IEnumerable<Food> HarvestedFoods
    {
        get { return harvestedFoods; }
    }

    public void Add(Food food)
    {
        // Тут хомяк может посолить, поперчить, проверить,
        // а не тухлая-ли еда попалась, перед тем как отложить впрок...
        harvestedFoods.Add(food); 
    }
}


Тогда вот ещё такой вопрос по этому коду и вообще. В методах класса лучше использовать геттеры и сеттеры для полей-данных класса, или сами эти поля-данные? Ну, т. е. конкретно в этом примере понятно, что по смыслу надо использовать harvestedFoods вместо HarvestedFoods. А вообще? Есть ли смысл использовать геттеры и сеттеры внутри класса, или они только для внешних клиентов?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38185422
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё вопрос по коду Скайана. Будет лучше или хуже, если вместо

Код: c#
1.
private List<Food> harvestedFoods = new List<Food>();



сделать

Код: c#
1.
private IEnumerable<Food> harvestedFoods = new List<Food>();



?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38185470
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Локальные проперти - это маразм.
2. Зачем тебе в реализации понижаться до IEnumerable? Ещё не понял разницу между реализацией и интерфейсами?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38185486
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, что касается моего примера, то вполне очевидно, что Вы не можете использовать свойство HarvestedFoods вместо переменной harvestedFoods, также Вы не можете изменить тип переменной harvestedFoods на IEnumerable<Food>.
На IList<Food> и даже на ICollection<Food> можете, а вот на IEnumerable<Food>.
Почему? Предлагаю Вам самостоятельно ответить на этот вопрос. Пример-то проще некуда.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38185499
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ1. Локальные проперти - это маразм.ТС не про локальные спрашивал, а:user7320Есть ли смысл использовать геттеры и сеттеры внутри класса, или они только для внешних клиентов?

Отвечу. Есть. Геттер или сеттер может содержать какую-то логику.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38186024
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grigory_RОсновное назначение интерфейсов описание сигнатур и поддержка отношения композиции.Композиция классов не получится?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38186030
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМСУ1. Локальные проперти - это маразм.ТС не про локальные спрашивал, а:user7320Есть ли смысл использовать геттеры и сеттеры внутри класса, или они только для внешних клиентов?

Отвечу. Есть. Геттер или сеттер может содержать какую-то логику.А если логика не нужна?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38186064
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
ТС не про локальные спрашивал, а:пропущено...


Отвечу. Есть. Геттер или сеттер может содержать какую-то логику.А если логика не нужна?

на проперти можно поставить точку останова, на филде нет
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38186114
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если есть проперти то доступ к полю даже изнутри класса только через него
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38188179
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.если есть проперти то доступ к полю даже изнутри класса только через него
Это утверждение или рекомендация? Если первое, то это неправда. А если второе, то почему?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38188190
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вот я только могу представить, если свойства содержат логику валидации полей, как в MVVM через IDataErrorInfo, то, пожалуй, стоит даже внутри класса к полям через свойства обращаться, если могут быть какие-то изменения этих полей.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38189155
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationАлексей Кпропущено...
А если логика не нужна?

на проперти можно поставить точку останова, на филде нетЕсли захочется, поле всегда можно преобразовать в свойство. Главное, чтобы была возможность перекомпилировать вызывающий код.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38189539
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Denis.если есть проперти то доступ к полю даже изнутри класса только через него
Это утверждение или рекомендация? Если первое, то это неправда. А если второе, то почему?
потому как когда захотите добавить логику или поставить брейкпоинт будете все юзаджи поля в классе искать
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38190356
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесли есть проперти то доступ к полю даже изнутри класса только через него

С моей точки зрения, не более чем пожелание.
Были у меня случаи, когда приходилось убирать обращение к свойству и менять на обращение к полю.
Просто необходимо помнить, что обращение к свойству это вызов метода.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38190790
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.user7320пропущено...

Это утверждение или рекомендация? Если первое, то это неправда. А если второе, то почему?
потому как когда захотите добавить логику или поставить брейкпоинт будете все юзаджи поля в классе искатьЧто нужно искать?

Было так:
Код: c#
1.
public int MyValue;


Стало так:
Код: c#
1.
public int MyValue { get; set; }


Или так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public int MyValue 
{ 
    // добавляем логику если надо
    get { _myValue = value; }
    set { return _myValue; }
}

int _myValue;


Достаточно перекомпилировать вызывающий код.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38190852
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, как и почти всегда, вы не даёте конкретного ответа (вздыхает). Как я понял, для каждого случая лучше что-то своё. Нужно каждый раз анализировать ситуацию. Общего правила нет... Вот так и утекает время и внимание на мелочи (вздыхает).

...(вздыхает ещё раз)
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38190868
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Вобщем, как и почти всегда, вы не даёте конкретного ответа (вздыхает). Как я понял, для каждого случая лучше что-то своё. Нужно каждый раз анализировать ситуацию. Общего правила нет...КО.

Многое зависит от Вашей предметной области.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38190872
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще есть S.O.L.I.D., есть ООА и ООП. Познакомьтесь с ними, а потом будете думать, что конкретно применить в конкретной ситуации.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38190931
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА вообще есть S.O.L.I.D., есть ООА и ООП. Познакомьтесь с ними, а потом будете думать, что конкретно применить в конкретной ситуации.+ SRP и DRY.

Но самое интересное начинается когда эти принципы противоречат друг с другу. :-)
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191342
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
конструкция "public int MyValue;" - для меня вообще загадочна.
Допустим есть проперти с паблик сеттером, допустим вы извне меняете естественно через сеттер, а изнутри класса меняете через поле. У вас в проперти инвалид значение и вы хотите поставить брейкпоинт чтобы поглядеть колстек. Что будете делать? И почему сразу изнутри класса не юзать гетеры сетеры?(про вырожденные случаи не надо). Вообще вопрос настолько очевидный, что его даже как-то странно обсуждать.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191374
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Вобщем, как и почти всегда, вы не даёте конкретного ответа (вздыхает). Как я понял, для каждого случая лучше что-то своё. Нужно каждый раз анализировать ситуацию. Общего правила нет... Вот так и утекает время и внимание на мелочи (вздыхает).

...(вздыхает ещё раз)
я дал правильный ответ :)
делай так чтобы торчали интерфейсы, желательно наиболее общего типа, достаточные для того чтобы предоставить необходимый контракт с одной стороны и скрыть реализацию внутри класса с другой. Внутри класса конструкции вида IList<string> list = new List<string>() теоретически смысл имеют, но практика показывает что смысл этот стремится к 0.
В большинстве случаев контракт коллекции торчащий наружу должен быть ienumerable<t>
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191452
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Алексей К,
конструкция "public int MyValue;" - для меня вообще загадочна.
Допустим есть проперти с паблик сеттером, допустим вы извне меняете естественно через сеттер, а изнутри класса меняете через поле.Где было предложено менять снаружи через сеттер, а внутри через поле? Я такого не помню.

Denis.У вас в проперти инвалид значение и вы хотите поставить брейкпоинт чтобы поглядеть колстек. Что будете делать? И почему сразу изнутри класса не юзать гетеры сетеры?(про вырожденные случаи не надо).Что мешает оперативно преобразовать поле в свойство?

Вызывающему коду вроде
Код: c#
1.
obj.MyValue = 18;

всё равно, поле это или свойство. Изменять его не придётся.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191457
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.делай так чтобы торчали интерфейсыТорчащий наружу IEnumerable может выйти боком в условиях многопоточности.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191459
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТорчащий наружу IEnumerable может выйти боком в условиях многопоточности.
В условиях многопоточности выйти боком могут гораздо более простые вещи. :)
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191478
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
так о том речь и шла по моему пониманию - юзать ли уже существующие проперти внутри класса через методы или через поля? Я утверждаю что по-умолчанию через методы(геторы сеторы)

Про многопоточность - это совсем отдельная песня.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191480
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDenis.делай так чтобы торчали интерфейсыТорчащий наружу IEnumerable может выйти боком в условиях многопоточности.
Блин, я уже сделал айэнумерейбл!

А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191483
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Торчащий наружу IEnumerable может выйти боком в условиях многопоточности.
Блин, я уже сделал айэнумерейбл!

А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?
Не тронь! Оставь как сделал :)
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191492
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Алексей К,
конструкция "public int MyValue;" - для меня вообще загадочна.
Допустим есть проперти с паблик сеттером, допустим вы извне меняете естественно через сеттер, а изнутри класса меняете через поле. У вас в проперти инвалид значение и вы хотите поставить брейкпоинт чтобы поглядеть колстек. Что будете делать? И почему сразу изнутри класса не юзать гетеры сетеры?(про вырожденные случаи не надо). Вообще вопрос настолько очевидный, что его даже как-то странно обсуждать.
Ну, выше же говорили про производительность, что это лишний вызов метода, который где-то на порядок медленнее прямого обращения к полю (судя по старым тестам ещё времён фреймворк 1-1.1, может, 2). Поэтому, скажем, обращение к полю через геттер внутри класса лучше всё же заменить на прямое обращение к полю в задачах, где слишком много таких обращений (всякие итерации по сассивам и пр.). Правильно я говорю, да?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191500
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

нет. Почти все неправильно. Забудь об этом и не вспоминай:). Я серьезно.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191501
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Торчащий наружу IEnumerable может выйти боком в условиях многопоточности.
Блин, я уже сделал айэнумерейбл!

А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?
Здесь http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx
и здесь http://msdn.microsoft.com/en-us/library/9eekhta0.aspx вообще ничего про потоки не написано (искал по "thre" по странице).
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191528
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Торчащий наружу IEnumerable может выйти боком в условиях многопоточности.
Блин, я уже сделал айэнумерейбл!

А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?Наружу торчит Enumerable. Вы не знаете что за коллекция за ним скрыта. Делаете по ней foreach. При этом оказывается, что это List, в который добавляет элементы другой поток.

Если наружу торчит что-то неизменяемое (массив, ReadOnlyCollection и т. п.) как-то спокойнее.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191618
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320пропущено...

Блин, я уже сделал айэнумерейбл!

А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?Наружу торчит Enumerable. Вы не знаете что за коллекция за ним скрыта. Делаете по ней foreach. При этом оказывается, что это List, в который добавляет элементы другой поток.

Если наружу торчит что-то неизменяемое (массив, ReadOnlyCollection и т. п.) как-то спокойнее.
Ну, наверное есть же какие-нибудь механизмы, которые могут извещять всякий поток, работающий с коллекцией, что другой поток в данный момент изменяет её? Или, даже если и есть такие механизмы, то они ничего не дадут?
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38191759
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Ну, наверное есть же какие-нибудь механизмы, которые могут извещять всякий поток, работающий с коллекцией, что другой поток в данный момент изменяет её? Или, даже если и есть такие механизмы, то они ничего не дадут?
С многопоточностью халявы не бывает.
Обеспечение потокобезопасности приложения полностью на совести разработчика приложения.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192210
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320пропущено...

Блин, я уже сделал айэнумерейбл!

А можете пример привести, когда в условиях многопоточности айэнумерейбл может вылезти боком и почему?Наружу торчит Enumerable. Вы не знаете что за коллекция за ним скрыта. Делаете по ней foreach. При этом оказывается, что это List, в который добавляет элементы другой поток.

Если наружу торчит что-то неизменяемое (массив, ReadOnlyCollection и т. п.) как-то спокойнее.
Бред сивой кобылы опасного ковбоя
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192214
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в методе торчит иенумарабле, неизвестно, что там в реализации. Может оказаться, что метод аккуратно форматирует жесткий диск.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192496
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Ну, выше же говорили про производительность, что это лишний вызов метода, который где-то на порядок медленнее прямого обращения к полю (судя по старым тестам ещё времён фреймворк 1-1.1, может, 2). Поэтому, скажем, обращение к полю через геттер внутри класса лучше всё же заменить на прямое обращение к полю в задачах, где слишком много таких обращений (всякие итерации по сассивам и пр.). Правильно я говорю, да?Почему тогда не писать сразу на ассемблере, если производительность так критична?
Не стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности.
http://ericlippert.com/2012/12/17/performance-rant/
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192504
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticПочему тогда не писать сразу на ассемблере, если производительность так критична?
Не стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности.
http://ericlippert.com/2012/12/17/performance-rant/
А зачем тормозить на ровном месте? Если Сишарп не самый быстрый язык в мире, это не значит, что нужно делать его медленнее, чем он есть. И если у меня какой-то метод слишком много обращается к полям своего класса, то почему бы сразу не сделать обращение к этим полям непосредственным, а не через геттеры? Сразу, а не после тестирования производительности и обнаружения очевидных просадок на тех местах, где вы их и ожидали ещё при написании кода.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192516
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА зачем тормозить на ровном месте? Если Сишарп не самый быстрый язык в мире, это не значит, что нужно делать его медленнее, чем он есть.Что значит "медленный"? Если вам важна скорость, почему вы не пишите на Асме/C/C++?
авторИ если у меня какой-то метод слишком много обращается к полям своего класса, то почему бы сразу не сделать обращение к этим полям непосредственным, а не через геттеры?Если есть просадка - обращайтесь. Разве я написал обратное?
авторНе стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности.
авторСразу, а не после тестирования производительности и обнаружения очевидных просадок на тех местах, где вы их и ожидали ещё при написании кода.Вместо того чтобы фокусироваться на мелочах лучше сфокусироваться на решении своей задачи.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192608
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticНе стоит заморачиваться на этих мелких оптимизацияхСтоит. Не считая того, что появляется привычка сразу писать максимально эффективный код, много мелких оптимизаций дают ощутимый прирост производительности системы в целом.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192622
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСтоит. Не считая того, что появляется привычка сразу писать максимально эффективный код, много мелких оптимизаций дают ощутимый прирост производительности системы в целом.Не стоит выдирать фразу из контекста. Если код занимается только доступом к данным класса через поля/свойства, то да. Иначе - нет.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192654
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticНе стоит выдирать фразу из контекста. Если код занимается только доступом к данным класса через поля/свойства, то да. Иначе - нет.А код который занимается только доступом к данным класса через поля/свойства никому не нужен.

авторСтоит. Не считая того, что появляется привычка сразу писать максимально эффективный код, много мелких оптимизаций дают ощутимый прирост производительности системы в целом.Стоит интересоваться мелкими оптимизациями. И в то же время не стоит их делать. Почему вы думаете, что пишете максимально эффективный код? Почему вы считаете, что много мелких оптимизаций дадут ощутимый прирост производительности системы в целом? Как влияет количество мелких оптимизаций на ощутимый прирост производительности? Насколько он ощутимый? Вы учитываете количество времени, которое тратите для этих оптимизаций? Стоит ли оно того?
http://ericlippert.com/2012/12/17/performance-rant/
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192660
VAlexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компилятор (если компилировать с оптимизацией, например в Release версии), заменяет геттеры на inline код:
http://www.ademiller.com/blogs/tech/2008/08/c-inline-methods-and-optimization/
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192696
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticПочему вы думаете, что пишете максимально эффективный код?Потому что я знаю разные приемы по оптимизации и использую их.
enigmaticПочему вы считаете, что много мелких оптимизаций дадут ощутимый прирост производительности системы в целом?Я не "считаю", это факт.
enigmaticКак влияет количество мелких оптимизаций на ощутимый прирост производительности?Молча. enigmaticНасколько он ощутимый?На глаз.
enigmaticВы учитываете количество времени, которое тратите для этих оптимизаций?Я не трачу время на написание не оптимального кода, чтобы потом тратить время на его оптимизацию, я пишу оптимально сразу. И я не трачу время на обдумывание, потому что знаю заранее, как оптимальней.enigmaticСтоит ли оно того?Оно мне бесплатно.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192705
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Окей.
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192707
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Демагоги
...
Рейтинг: 0 / 0
Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
    #38192786
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticНе стоит заморачиваться на этих мелких оптимизациях, если точно не видно, что есть существенное падение производительности.

в частности, тут было это:
какое приложение быстрее х86 или х64. маленькое исследование
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Какие лучше иметь данные-коллекции в классах - конкретные или интерфейсы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]