powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Производительность - возвращенный интерфейс
58 сообщений из 58, показаны все 3 страниц
Производительность - возвращенный интерфейс
    #39628747
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже не помню как и откуда, но усвоил никогда не возвращать из метода интерфейс, а только конкретный тип. ЕМНИП если возвращать интерфейс, страдает производительность. Но тут попал в дурдом, где все методы возвращают интерфейсы. Типа
Код: c#
1.
public IEnumerable<string> GetItems()


против привычного
Код: c#
1.
public List<string> GetItems()


Помогите объяснить в конкретных терминах, чем это плохо. Нутром чую что это неправильно, но уже не помню откуда это взял.

Вариант где может вернуться разный класс не рассматриваются
Код: c#
1.
2.
3.
4.
5.
public IEnumerable<string> GetItems(bool something)
{
  if(something) return new List<string>{"a"};
  else return new ConcurrentBag<string>{"b"};
}


В этой конкретной ситуации метод возвращает только один тип.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628750
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если речь про скорость вызова метода через класс или интерфейс то этим можно пренебречь.
Есть такой принцип что нужно отдавать максимально специфичный тип и потреблять максимально общий. Я с ним не согласен и предпочитаю потреблять и отдавать максимально общий тип в контексте задачи, естественно. IEnumerable стоит особняком, с ним лучше аккуратнее так как он может быть реализован по разному и может получится что один и те же тяжелые вычисления(ну ил запросы куда то) делаются много раз + возможны ленивые вычисления. Я часто предпочитаю IReadonlyCollection, если в методе кроются вычисления. Иногда приходится тип делать более конкретным, но все равно предпочитаю оставлять его общим в рамках задачи. К примеру, если я знаю что возвращаю коллекцию по логике в которой нужно будет что то искать, я по ситуации могу вернуть, например, ISet<>
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628777
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Koblerпротив привычного
Код: c#
1.
public List<string> GetItems()



Никогда. Ещё раз. Никогда. Публичные методы. Не должны. Возвращать List !!!

Насчёт IEnumerable. Всё верно, если возвращать IEnumerable, производительность страдает. Но страдает не только производительность, это семантически не верно в большинстве случаев.

IEnumerable это БЕСКОНЕЧНОЕ перечисление по своей сути. Конечно, оптимизированные методы пытаются привести его к ICollection, чтобы прочитать количество элементов.

Основной свод правил такой:

Возвращаем (в порядке предпочтительности)

1. IReadOnlyCollection
2. IReadOnlyList
3. ICollection
4. IList
5. [] -- массив
5. IEnumerable (только в случаях, когда возвращаемый набор данных вычисляется лениво, например, с помощью LINQ или yield).

Но никогда нельзя возвращать List!

Принимам (в порядке предпочтительности)

1. IReadOnlyCollection
2. IReadOnlyList
3. IEnumerable (только в том случае, если принимающий метод проходит по списку один раз и заранее ему не требуется знать количество элементов)
4. ICollection
5. IList
6. [], params []

Нет, нельзя принимать List!

По поводу List. Его можно использовать только внутри реализации, можно принимать/отдавать только внутри приватных методов, даже не protected, только private.


Gobzo KoblerЯ уже не помню как и откуда, но усвоил никогда не возвращать из метода интерфейс, а только конкретный тип.

Я понятия не имею, откуда вам удалось «усвоить» этот бред. Но выкиньте его из головы. Если желаете работать на профессиональном уровне, в достойных командах, не делайте так. Всегда предпочитайте интерфейсы в публичных контрактах. Конечно без фанатизма, так как есть и обратный вариант тупизны, это везде бездумно использовать IEnumerable, это тоже не правильно, и как раз тут может пострадать и производительность и даже вовсе код может работать неправильно, так как IEnumerable это однопроходная коллекция, только для чтения. Никто не гарантирует, что при втором проходе вы получите тот же результат или вообще не словите ошибку.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628778
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Koblerпротив привычного
Код: c#
1.
public List<string> GetItems()



Как же долго нам приходится выбивать вот эту дурь из головы джуниоров. Сколько копий сломано...

Ээээх...
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628779
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo KoblerПомогите объяснить в конкретных терминах, чем это плохо.

Объясняю на пальцах. Возвращая List, вы по сути выставляете кишками наружу реализацию. Естественно, это будет не единичный случай, другие методы будут ожидать List. Ещё хуже это сказывается при использовании generics, например, для async/await. Просто физически будет крайне сложно провести хоть какой-то рефакторинг. Например, проксировать, декорировать коллекции будет тупо невозможно. Невозможно будет заменить List на более подходящую в данном конкретном случае коллекцию. А также с тестированием будут сложности и проблемы.

На каком-нибудь лабораторном примере из сотни строк кода, да, проблему здесь трудно увидеть. Но лучше изначально приучать себя кодить правильно, а не как джун.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628793
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕщё хуже это сказывается при использовании generics, например, для async/await.
И ко/контрвариантность работает только с интерфейсами, для классов будет облом.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628794
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныhVosttЕщё хуже это сказывается при использовании generics, например, для async/await.
И ко/контрвариантность работает только с интерфейсами, для классов будет облом.

Спасибо за дополнение :)
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628853
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ко/контравариантность в C# это реализация принципов Контрактного программирования (DbC).

Собственно, ковариантность - это _возвращение_ типа, производного от базового (который определен в интерфейсе C#) - это контракты на то, что возвращаемое значение/тип (посткондиция в терминах DbC) вызывающей ф-ции/производного класса должны оба удовлетворяться (в т.ч быть совместимыми по типам). Т.е возвращаемый тип должен ужесточать/сужать требования по типу и значениям!

Аналогично, контравариантность - это _получение_ типа, производного от базового. И является прекондицией - в этом случае в вызывающей функции/производном классе должно выполняться хоть один из контрактов(для шарпа это применяется в делегатах). Таким образом по иерархии классов в сторону наследников или субвызовов мы можем расширять принимаемые типы.

Так что тов.Хвост, с точки зрения абстрактной теории, таки прав на 50%. На практике же все не так однозначно.

Конечно, придется рефакторить при смене иерархий, но зато мы исключаем(снижаем) вероятность такого замечательного Иксепшна "Ой, а что это за неизвестный тип мне прилетел, я не умею!"


Ну а с точки зрения производительности .vs. C# + интерфейсы это уже совсем попендикулярная история.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628876
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttGobzo KoblerПомогите объяснить в конкретных терминах, чем это плохо.

Объясняю на пальцах. Возвращая List, вы по сути выставляете кишками наружу реализацию. Естественно, это будет не единичный случай, другие методы будут ожидать List. Ещё хуже это сказывается при использовании generics, например, для async/await. Просто физически будет крайне сложно провести хоть какой-то рефакторинг. Например, проксировать, декорировать коллекции будет тупо невозможно. Невозможно будет заменить List на более подходящую в данном конкретном случае коллекцию. А также с тестированием будут сложности и проблемы.

На каком-нибудь лабораторном примере из сотни строк кода, да, проблему здесь трудно увидеть. Но лучше изначально приучать себя кодить правильно, а не как джун.Ну давай класс String тоже за интерфейсом скроем... А то мало ли чего... Простите, не удержался...
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628889
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу давай класс String тоже за интерфейсом скроем... А то мало ли чего... Простите, не удержался...
Толку его скрывать за интерфейсом, если он иммутабельный. Вот StringBuilder - ага, можно.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628893
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglно зато мы исключаем(снижаем) вероятность такого замечательного Иксепшна "Ой, а что это за неизвестный тип мне прилетел, я не умею!"
Возможность ко/контрвариации контролируются на этапе компиляции. О каком эксепшене речь?
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628896
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglТак что тов.Хвост, с точки зрения абстрактной теории, таки прав на 50%. На практике же все не так однозначно.

У нас кодовая база на 100% этому следует. На практике, приходят джуны и начинают городить List<T>.
Вот и всё.


SiemarglКонечно, придется рефакторить при смене иерархий, но зато мы исключаем(снижаем) вероятность такого замечательного Иксепшна "Ой, а что это за неизвестный тип мне прилетел, я не умею!"

Вот здесь не понял.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628897
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу давай класс String тоже за интерфейсом скроем... А то мало ли чего... Простите, не удержался...

Да ты... да понятно уже всё с тобой
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628900
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВот StringBuilder - ага, можно.

StringWriter
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628960
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

нельзя так категорично, в разных ситуациях используют разную логику.
возьмём к примеру ItemsControl
Код: c#
1.
public ItemCollection Items


пожалуйста, никаких интерфейсов и свойство Public.
Вариантов таких много.

Меня больше раздражает то, что интерфейсы очень часто используют там, где они нафиг не нужны.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39628994
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныАлексей КНу давай класс String тоже за интерфейсом скроем... А то мало ли чего... Простите, не удержался...
Толку его скрывать за интерфейсом, если он иммутабельный. Вот StringBuilder - ага, можно.Ну и что, что иммутабельный... Надо возвращать IEnumerable<char> . А то вдруг чего!
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629116
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesнельзя так категорично, в разных ситуациях используют разную логику.
возьмём к примеру ItemsControl
Код: c#
1.
public ItemCollection Items



пожалуйста, никаких интерфейсов и свойство Public.
Вариантов таких много.

ItemCollection, это изначально публичный контракт. Но даже такого в фреймворке уже с недавних пор все меньше и меньше.


Roman MejtesМеня больше раздражает то, что интерфейсы очень часто используют там, где они нафиг не нужны.

Например?
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629118
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу и что, что иммутабельный... Надо возвращать IEnumerable<char> . А то вдруг чего!

Чего сказать-то хотел? )
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629127
eny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
eny
Гость
hVosttGobzo KoblerПомогите объяснить в конкретных терминах, чем это плохо.

Объясняю на пальцах. Возвращая List, вы по сути выставляете кишками наружу реализацию. Естественно, это будет не единичный случай, другие методы будут ожидать List. Ещё хуже это сказывается при использовании generics, например, для async/await. Просто физически будет крайне сложно провести хоть какой-то рефакторинг. Например, проксировать, декорировать коллекции будет тупо невозможно. Невозможно будет заменить List на более подходящую в данном конкретном случае коллекцию. А также с тестированием будут сложности и проблемы.

На каком-нибудь лабораторном примере из сотни строк кода, да, проблему здесь трудно увидеть. Но лучше изначально приучать себя кодить правильно, а не как джун.

Полностью поддерживаю!!!
Плюс еще одна тонкость - затраты времени на выделение и запись в памяти.
List или Array это статические объекты, в которые нужно выделить и в них аккуратненько сложить данные. А потом, чаще всего, по ним просто так "быстро пробегают" итератором. Да пробежать сферический, уже подготовленный, список - быстрее по индексу.
Но если данные изначально должнны быть откуда-то (с помощью LINQ хе-хе) найдены, а потом запихнуть их в список - прощай производительность и быстродействие, а потом рассказывают байки что LINQ тормозной и память жрет. Лучше вообще не использовать всякие там ToList и ToArray ;) начинающими.
Так что, если вы знаете что LINQ запрос вернет миллион значений, нужно очень сильная необходимость для складывания этого дела в список, лучше уж вернуть IEnumerable наверх для дальнейших действий.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629255
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eny,
Вопрос был не про linq, а про то в чем возвращать список из 10 строк.
Справочник валют какой нибудь.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629256
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КНу и что, что иммутабельный... Надо возвращать IEnumerable<char> . А то вдруг чего!

Чего сказать-то хотел? )
Ну юмор у него на 5 баллов))).
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629258
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesМеня больше раздражает то, что интерфейсы очень часто используют там, где они нафиг не нужны.+1
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629321
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Roman MejtesМеня больше раздражает то, что интерфейсы очень часто используют там, где они нафиг не нужны.+1

Так можно сказать про что угодно. Единственный момент, что можно исправить, это перестать раздражаться ))
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629356
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныSiemarglно зато мы исключаем(снижаем) вероятность такого замечательного Иксепшна "Ой, а что это за неизвестный тип мне прилетел, я не умею!"
Возможность ко/контрвариации контролируются на этапе компиляции. О каком эксепшене речь?Когда ты получил максимально общий (базовый) тип на возврате - часто придется приводить тип к нужному потомку.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629359
eny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
eny
Гость
Petro123eny,
Вопрос был не про linq, а про то в чем возвращать список из 10 строк.
Справочник валют какой нибудь.

Тогда вообще никакой разницы в быстродействии, но использование IEnumerable предпочтительней, ибо дает определенную гибкость и архитектурные плюшки.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629367
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eny,

IEnumerable и LINQ - фигня полные.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629375
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosIEnumerable и LINQ - фигня полные.IEnumerable и LINQ - лучшие изобретения человечества
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629388
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enyТогда вообще никакой разницы в быстродействии,именно! +1
Т.к. для быстродействия пишут спец методы как для асинхронных GetXXXXAsync.
Поэтому и сабж ниочем.

enyно использование IEnumerable предпочтительней, ибо дает определенную гибкость и архитектурные плюшки.
В архитектуре есть слово оверхед.
Поэтому программисты много получают)).
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629391
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoseny,
IEnumerable и LINQ - фигня полные.
Потому что ты веб не писал.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629401
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

веб тоже фигня полная
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629445
eny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
eny
Гость
ViPRosPetro123,

веб тоже фигня полная
моя прога круче твоей фигни хахахааа
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629448
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProViPRosIEnumerable и LINQ - фигня полные.IEnumerable и LINQ - лучшие изобретения человечества
Далеко не лучшие, но хорошо что их изобрели. Без них хуже.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629449
eny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
eny
Гость
Petro123enyно использование IEnumerable предпочтительней, ибо дает определенную гибкость и архитектурные плюшки.
В архитектуре есть слово оверхед.
Поэтому программисты много получают)).

Нету тут никакого оверхеда, жизнь заставит - будешь писать енумераторы сам... пачками
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629472
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

приятно услышать в свой адрес много грязи от умного человека. всех благ!
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629538
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДалеко не лучшие, но хорошо что их изобрели. Без них хуже.
ну, у него и веб фигня, и Фаулер фигня. Так что спор бесполезен.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629540
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enyPetro123пропущено...
В архитектуре есть слово оверхед.
Поэтому программисты много получают)).
Нету тут никакого оверхеда, жизнь заставит - будешь писать енумераторы сам... пачками
"оверхед или жизнь"
Вот оказывается как строятся аргументы).
....
Даже когда ты пишешь:
var s =
Ты уже решаешь что будет оверхедом а что нет.
Написать:
Код: c#
1.
2.
3.
string s = 
//или
var s = 
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629542
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Gobzo Kobler, вчера, 23:15 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21331447][21331447]
>...Нутром чую что это неправильно...
Иди от задачи, знай и умей как работать с тем и другим вариантами.
Я обычно храню выборку из базы данных в списке или ObservableCollection<row_Entity>.

Для списка могу
так List<row_Entity> lst_Entity = new List<row_Entity>();
или так IList<row_Entity> Ilst_Entity = new List<row_Entity>();

Но с ObservableCollection это не проходит
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629650
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевНо с ObservableCollection это не проходис чего вдруг? ObservableCollection реализует IList
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629742
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Shocker.Pro, сегодня, 09:51 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21335619][21335619]
>...ObservableCollection реализует IList ...
ObservableCollection реализует много интерфейсов.
Мне нужно это - WPF предоставляет ObservableCollection<T> класс, который является встроенной реализацией коллекции данных, которая реализует INotifyCollectionChanged интерфейса.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629757
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевIList<row_Entity> Ilst_Entity = new List<row_Entity>();

Но с ObservableCollection это не проходитНу ты же пишешь конкретно про IList, в этом контексте я тебе и ответил. Или раскрывай, что куда у тебя "не проходит"
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629855
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Shocker.Pro, сегодня, 12:05 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21336128][21336128]
>Ну ты же пишешь конкретно про IList...
Я не писал конкретно про IList, - вот моя фраза - обычно храню выборку из базы данных в списке или ObservableCollection<row_Entity>.
Работаю с выборкой в DataGrid-е и поступаю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
     . . .  
     //-- Готовим параметры вызова хранимой процедуры
      asp = new OracleParameter[4];
      asp[0] = new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output);

      string xstr = tbx_Название.Text.Trim();
      xstr = (string.IsNullOrEmpty(xstr)) ? null : xstr + "%";
      asp[1] = new OracleParameter("x_nazvanie", xstr);

      asp[2] = new OracleParameter("x_dt_begin", (DateTime)dpr_Начало.SelectedDate);
      asp[3] = new OracleParameter("x_dt_end", (DateTime)dpr_Конец.SelectedDate);

      //-- Чистим кеш
      lst_Entity = null;
      lst_Entity = new List<row_Entity>();

      при.tmrStart(); //-- запуск процесса визуализации получения выборки
      //-- Получение выборки
      await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.VD_Inspek_Sel", wsp.sp_Sel, asp, RowToEntity));
      //-- Обработка не штатной ситуации
      if(wsp.wspErr != null) { MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK); }

      //-- Покажем выборку
      при.tmrStop(); //-- Останавливаем процесс визуализации формирования выборки
      dgv_Entity.AutoGenerateColumns = false;
      dgv_Entity.ItemsSource = null; //-- Чистим DataGrid
      if (lst_Entity != null) {
        [color=red]oc_Entity[/color] = new ObservableCollection<row_Entity>(lst_Entity); 
        dgv_Entity.ItemsSource =[color=red] oc_Entity[/color];
        //-- Флаг размера выборки
        lbl_ФРВ.Visibility = (nRow == гп.max_Выборка) ? Visibility.Visible : Visibility.Hidden;
        if (oc_Entity.Count != 0) {
          dgv_Entity.SelectedIndex = 0;
          xrow = (row_Entity)dgv_Entity.SelectedItem;
          dgv_Entity.ScrollIntoView(xrow);
        }
        lst_Entity = null;
      }
      . . . 


На вход DataGrid поставляю объект - dgv_Entity.ItemsSource = oc_Entity;
Как это заменить интерфейсом не знаю.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629870
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае ты присваиваешь свежесозданный экземпляр коллекции напрямую источнику данных - ну их где тут сабж - разговор-то про интерфейсы.

Если ты напишешь
Код: c#
1.
public IList<row_Entity> Ilst_Entity {get;set;} = new ObservableCollection<row_Entity>(lst_Entity); 

и скормишь датагриду, ничего принципиально не поменяется
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629958
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Shocker.Pro, сегодня, 14:18 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21336856] [21336856]
>...и скормишь датагриду, ничего принципиально не поменяется
Если правильно понял, то это тождественно:
Ilst_Entity = new ObservableCollection<row_Entity>(st_Entity);
dgv_Entity.ItemsSource =Ilst_Entity;
и
oc_Entity = new ObservableCollection<row_Entity>(lst_Entity);
dgv_Entity.ItemsSource = oc_Entity;
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39629983
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, не понял вопроса, но речь не об этом.
hVosttПо поводу List. Его можно использовать только внутри реализации, можно принимать/отдавать только внутри приватных методов, даже не protected, только private.Вот ты внутри своего метода и используешь что хочешь и как хочешь, и твой пример не имеет никакого отношения к обсуждаемому вопросу. И внутренний источник данных обычно не выставляется наружу.
А у тебя вообще неизвестно зачем создается лист, а потом на базе листа ObservableCollection.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630057
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo KoblerhVostt,

приятно услышать в свой адрес много грязи от умного человека. всех благ!

я хз, какую вы "грязь" уважаемые судари видети и где...

но если хотите любезностей, а не помощи, предупреждайте заранее.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630137
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttGobzo Koblerпротив привычного
Код: c#
1.
public List<string> GetItems()




Как же долго нам приходится выбивать вот эту дурь из головы джуниоров. Сколько копий сломано...

Ээээх...

полностью поддерживаю, коллега
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630345
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Shocker.Pro, 13 апр 18, 15:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21337320][21337320]
>Честно говоря, не понял вопроса, но речь не об этом.
Честно говоря, я не понял, что Вы не поняли.
Автор утверждающе : ...но усвоил никогда не возвращать из метода интерфейс ...Нутром чую что это неправильно...
hVostt сузил вопрос - List<T> или IList<T>. Что собственно и правильно - имеет смысл пользоваться интерфейсами.
Но всегда ли это возможно?
Как записать dgv_Entity.ItemsSource = GetItems(); если item есть ObservableCollection?
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630366
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевКак записать dgv_Entity.ItemsSource = GetItems(); если item есть ObservableCollection?
Судя по документации: DataGrid.ItemsSource Property, - подойдёт любой тип, реализующий IEnumerable.

Другими словами Ваш метод GetItems вполне себе может быть определён так:
Код: c#
1.
IEnumerable GetItems()


При этом внутри создавать ObservableCollection.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630370
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевКак записать dgv_Entity.ItemsSource = GetItems(); если item есть ObservableCollection?Зачем вообще GetItems() должен возвращать ObservableCollection? Если это обращение, скажем, к репозиторию, то репозиторий уж точно не должен возвращать никакого ObservableCollection, он может вернуть ICollection или IEnumerable, из которого уже на уровне модели преставления создается ObservableCollection.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630381
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
он пока ещё не дошёл до понятий ОРМ, репозитарий, модель и MV***
По его коду видно.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630388
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Shocker.Pro,
он пока ещё не дошёл до понятий ОРМ, репозитарий, модель и MV***
По его коду видно.К сожалению, да, хотя вроде он давно программированием занимается, тут вообще жуткое спагетти.
С другой стороны, если он сам по себе заинтересовался абстрактным топиком - значит не все еще потеряно )
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630391
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 09:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21340456][21340456]
>... При этом внутри создавать ObservableCollection.
Извините, я видимо совсем отстал от жизни.
Когда это стало возможным, по переданному интерфейсу определить, что объект реализует и другой интерфейс?
В обсуждаемом случае задействованы как минимум два интерфейса - IEnumerable и INotifyCollectionChanged, что и реализует ObservableCollection.
См. примечание здесь .
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630392
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевКогда это стало возможным, по переданному интерфейсу определить, что объект реализует и другой интерфейс?Он определяет не по переданному интерфейсу, а по переданному объекту. Кури рефлексию. Так работает почти весь WPF. Обрати внимание, что свойство ItemsSource принимает object, почему тебя это не смущало раньше?
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630393
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(хотя нет, наврал, принимает IEnumerable, но неважно в данном случае)
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630396
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Shocker.Pro, сегодня, 10:05 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21340493][21340493]

>Зачем вообще GetItems() должен возвращать ObservableCollection?...
Мы по разному реализуем обработку и представление данных выборки. Я выборку, в формате List<T> или ObservableCollection<T>, предпочитаю иметь в классе (панель UserUserControl), где её обрабатываю. Повозился с а-ля репозиторием и плюнул.
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630398
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 09:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21340456][21340456]
>... При этом внутри создавать ObservableCollection.
Извините, я видимо совсем отстал от жизни.
Когда это стало возможным, по переданному интерфейсу определить, что объект реализует и другой интерфейс?
В обсуждаемом случае задействованы как минимум два интерфейса - IEnumerable и INotifyCollectionChanged, что и реализует ObservableCollection.
См. примечание здесь .
Передаётся не интерфейс, а объект. Понять, что объект реализует определённый интерфейс можно было всегда.
В примечании, на которое Вы ссылаетесь, речь об объектах в коллекции и требованиям к ним.

Вообщем есть тип: класс, интерфейс, структура. А есть объект - экземпляр типа.

...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630399
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевЯ выборку, в формате List<T> или ObservableCollection<T>, предпочитаю иметь в классе (панель UserUserControl), где её обрабатываю. Повозился с а-ля репозиторием и плюнул.
Ты в топик пришёл рассказывать про себя или учиться?
...
Рейтинг: 0 / 0
Производительность - возвращенный интерфейс
    #39630412
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 12:37 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1290314&msg=21340621][21340621]
>...Передаётся не интерфейс, а объект...
Спасибо.
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Производительность - возвращенный интерфейс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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