partial method
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 11.03.22 08:09
Оценка:
Век живи — век учись, а так дураком и помрешь.
partial method
удобная кстати штука. не знал до сего дня к своему стыду.
Re: partial method
От: samius Россия http://sams-tricks.blogspot.com
Дата: 11.03.22 08:32
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Век живи — век учись, а так дураком и помрешь.

В переделке пословицы нет слова "так". А дураком помрешь — это прилагается неотъемлемо к веку обучения. Впрочем, выполнение условия "век учись" тут не является решающим. Можно оптимизировать и оставить одно "... а дураком помрешь".
Re: partial method
От: karbofos42 Россия  
Дата: 11.03.22 15:37
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Век живи — век учись, а так дураком и помрешь.

vaa>partial method
vaa>удобная кстати штука. не знал до сего дня к своему стыду.

Я вообще partial классами не пользуюсь как-то.
Чем оно удобно, кроме использования с кодогенераторами?
Re[2]: partial method
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.03.22 18:49
Оценка:
Здравствуйте, karbofos42, Вы писали:


K>Я вообще partial классами не пользуюсь как-то.

K>Чем оно удобно, кроме использования с кодогенераторами?

Ну иногда классы просто огромны. Их удобно разделять по функционалу на файлы.
А partial классы как раз для кодогенерации
https://www.rsdn.org/forum/dotnet/7719189.hot

Так же собираются добавить partial методы отличных от void, ref параметры, private
https://github.com/jaredpar/csharplang/blob/partial/proposals/extending-partial-methods.md

partial on all members
Given that we're expanding partial to be more friendly to source generators should we also expand it to work on all class members? For example should we be able to declare partial constructors, operators, etc ...
Resolution The idea is sound but at this point in the C# 9 schedule we're trying to avoid unnecessary feature creep. Want to solve the immediate problem of expanding the feature to work with modern source generators.
Extending partial to support other members will be considered for the C# 10 release. Seems likely that we will consider this extension.

и солнце б утром не вставало, когда бы не было меня
Re[3]: partial method
От: karbofos42 Россия  
Дата: 11.03.22 20:30
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, karbofos42, Вы писали:



K>>Я вообще partial классами не пользуюсь как-то.

K>>Чем оно удобно, кроме использования с кодогенераторами?

S> Ну иногда классы просто огромны. Их удобно разделять по функционалу на файлы.

S>А partial классы как раз для кодогенерации
S>https://www.rsdn.org/forum/dotnet/7719189.hot

S>Так же собираются добавить partial методы отличных от void, ref параметры, private

S>https://github.com/jaredpar/csharplang/blob/partial/proposals/extending-partial-methods.md
S>

S>partial on all members
S>Given that we're expanding partial to be more friendly to source generators should we also expand it to work on all class members? For example should we be able to declare partial constructors, operators, etc ...
S>Resolution The idea is sound but at this point in the C# 9 schedule we're trying to avoid unnecessary feature creep. Want to solve the immediate problem of expanding the feature to work with modern source generators.
S>Extending partial to support other members will be considered for the C# 10 release. Seems likely that we will consider this extension.


Ну, мне просто в голову приходит из адекватного использования только кодогенерация, либо вынос каких-нибудь платформозависимых частей, если активно используются #if для различных вариантов компиляции.
Кто с подобным работает, по идее должен быть в курсе и partial методов.
Большие классы мне если и попадались, то там были явные ошибки в архитектуре и рефакторингом они легко разделялись на небольшие классы.
Ну, единичные случаи могут быть и допустимы где-то и оправданы, вполне допускаю, что такое возможно и от безисходности можно и partial-классы использовать.
Может я что-то упускаю и люди придумали какие-то хитрые и удобные конструкции при помощи partial-методов.
Вот и интересно: в чём же именно удобство partial-методов, если это не кодогенерация какая-нибудь?
Re[2]: partial method
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 12.03.22 02:37
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Здравствуйте, vaa, Вы писали:


vaa>>Век живи — век учись, а так дураком и помрешь.

vaa>>partial method
vaa>>удобная кстати штука. не знал до сего дня к своему стыду.

K>Я вообще partial классами не пользуюсь как-то.

K>Чем оно удобно, кроме использования с кодогенераторами?

Пару раз разделял логику визуально.
Но вот частичными методами не сталкивался.
тут сгенерил рест клиента по свагеру.
а там эти самые методы без реализации, ну чисто интерфейс или абстрактный метод.
и вызов. почитал, оказывается компилятор удаляет методы без тела.
ну т.е. это типа шаблонный метод. они же приватные, но можно реализовать и они будут вызываться.
Re[3]: partial method
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 12.03.22 02:38
Оценка:
Здравствуйте, Serginio1, Вы писали:


S>Так же собираются добавить partial методы отличных от void, ref параметры, private


странное решение, они потому и приват что удаляются при компиляции если нет тела.
если же они будут паблик, как их удалить?
Re[4]: partial method
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.03.22 07:40
Оценка:
Здравствуйте, karbofos42, Вы писали:


K>Вот и интересно: в чём же именно удобство partial-методов, если это не кодогенерация какая-нибудь?

Они и были сделаны для кодогенерации. Сейчас с появлением Source Generators необходимость в них сильно увеличилась. Причем без нынешних ограничениях
и солнце б утром не вставало, когда бы не было меня
Re[4]: partial method
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.03.22 07:42
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, Serginio1, Вы писали:



S>>Так же собираются добавить partial методы отличных от void, ref параметры, private


vaa>странное решение, они потому и приват что удаляются при компиляции если нет тела.

vaa>если же они будут паблик, как их удалить?

Они не удаляются, а заменяются на реальный сгенерированный. Это все для Source Generators, генерация которой происходит на уровне дизайна!
и солнце б утром не вставало, когда бы не было меня
Re[5]: partial method
От: karbofos42 Россия  
Дата: 12.03.22 10:21
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>Здравствуйте, Serginio1, Вы писали:



S>>>Так же собираются добавить partial методы отличных от void, ref параметры, private


vaa>>странное решение, они потому и приват что удаляются при компиляции если нет тела.

vaa>>если же они будут паблик, как их удалить?

S> Они не удаляются, а заменяются на реальный сгенерированный. Это все для Source Generators, генерация которой происходит на уровне дизайна!


С приватными partial-методами сейчас так, что если нет реализации, а только описание, то компилятор просто выкидывает все вызовы этого несуществующего метода, как-будто его и не было.
Поэтому и важно, что void и приватный. С публичными и возвращающими результат уже появляются вопросы.
Если кодогенератор за ненадобностью не сделал метод, то компилятор метод-заглушку будет генерировать и потом на его вызов будут тратиться лишние ресурсы?
Или такие методы обяжут реализовывать и компилятор будет ругаться, что метод описан, но не реализован?
Re[6]: partial method
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.03.22 10:24
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, vaa, Вы писали:


vaa>>>Здравствуйте, Serginio1, Вы писали:



S>>>>Так же собираются добавить partial методы отличных от void, ref параметры, private


vaa>>>странное решение, они потому и приват что удаляются при компиляции если нет тела.

vaa>>>если же они будут паблик, как их удалить?

S>> Они не удаляются, а заменяются на реальный сгенерированный. Это все для Source Generators, генерация которой происходит на уровне дизайна!


K>Если кодогенератор за ненадобностью не сделал метод, то компилятор метод-заглушку будет генерировать и потом на его вызов будут тратиться лишние ресурсы?

K>Или такие методы обяжут реализовывать и компилятор будет ругаться, что метод описан, но не реализован?
Обяжут реализовывать. Собственно для этого они и нужны.
и солнце б утром не вставало, когда бы не было меня
Re[7]: partial method
От: karbofos42 Россия  
Дата: 12.03.22 11:45
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, karbofos42, Вы писали:


K>>Здравствуйте, Serginio1, Вы писали:


S>>>Здравствуйте, vaa, Вы писали:


vaa>>>>Здравствуйте, Serginio1, Вы писали:



S>>>>>Так же собираются добавить partial методы отличных от void, ref параметры, private


vaa>>>>странное решение, они потому и приват что удаляются при компиляции если нет тела.

vaa>>>>если же они будут паблик, как их удалить?

S>>> Они не удаляются, а заменяются на реальный сгенерированный. Это все для Source Generators, генерация которой происходит на уровне дизайна!


K>>Если кодогенератор за ненадобностью не сделал метод, то компилятор метод-заглушку будет генерировать и потом на его вызов будут тратиться лишние ресурсы?

K>>Или такие методы обяжут реализовывать и компилятор будет ругаться, что метод описан, но не реализован?
S>Обяжут реализовывать. Собственно для этого они и нужны.

Для текущих приватных partial-методов вроде даже на MSDN как плюс было про то, что их можно использовать как делегат, который не нужно проверять на null перед вызовом.
Если не надо — не реализовал и он просто вызываться не будет, как-будто и не было.
Навешивают всякое в язык бездумно, а потом чёрт ногу сломит и запутаешься где у кода какое поведение.
Поменял сигнатуру partial-метода и начнутся танцы, что на половине кодогенераторов вдруг перестало компилироваться, т.к. ранее необязательные методы стали теперь обязательными.
Re[8]: partial method
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.03.22 14:34
Оценка:
Здравствуйте, karbofos42, Вы писали:


K>>>Если кодогенератор за ненадобностью не сделал метод, то компилятор метод-заглушку будет генерировать и потом на его вызов будут тратиться лишние ресурсы?

K>>>Или такие методы обяжут реализовывать и компилятор будет ругаться, что метод описан, но не реализован?
S>>Обяжут реализовывать. Собственно для этого они и нужны.

K>Для текущих приватных partial-методов вроде даже на MSDN как плюс было про то, что их можно использовать как делегат, который не нужно проверять на null перед вызовом.

K>Если не надо — не реализовал и он просто вызываться не будет, как-будто и не было.
K>Навешивают всякое в язык бездумно, а потом чёрт ногу сломит и запутаешься где у кода какое поведение.
K>Поменял сигнатуру partial-метода и начнутся танцы, что на половине кодогенераторов вдруг перестало компилироваться, т.к. ранее необязательные методы стали теперь обязательными.

Ну ты это немерлистам расскажи. Если же ты меняешь сигнатуру, то и генератор должен подправить. Вообще SG очень удобная штука.
Но приходится делать абстрактный класс, а в генераторе переопределять методы. Неудобно!
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.