Re[19]: partial methods
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.11.24 17:26
Оценка:
Здравствуйте, Codealot, Вы писали:

S>> Реализация будет в разных файлах, а объявление partial в основном.


C>И что тебе мешает сделать так же с базовым классом?

Зачем мне 2 класса вместо одного? Зачем плодить сущности?

Проблема виртуальности в том, что тяжело читать код.
То есть видишь метод, но реально переопределяет этот метод 10 классов.
И ничем не лучше partial классов.
Чем abstract или интерфейс лучше partial?
Только тем, что тебе почему то не нравится partial? Мне очень нравится и не только мне.
Мне partial нужен только для быстрого понимания кода в небольших классах.
Там где классы большие partial methods и не нужен.
Вернее может он и нужен где то для T4, но для SG не нужен.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 15.11.2024 17:37 Serginio1 . Предыдущая версия .
Re[9]: partial methods
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.11.24 17:31
Оценка:
Здравствуйте, Codealot, Вы писали:

P>>больше 2х — сиди и думай, что от чего наследуется, сущности плодятся


C>Вот уж проблема.


Именно что проблема. Малеха пропустили, и ваш метод повис в воздухе.

В тс такой фичи нету, пришлось выворачиваться как раз на виртуальных методах, очень скользкая вещь
Re[10]: partial methods
От: Codealot Земля  
Дата: 15.11.24 18:00
Оценка:
Здравствуйте, Pauel, Вы писали:

P>Малеха пропустили, и ваш метод повис в воздухе.


Непонятно, что ты хотел сказать.
Ад пуст, все бесы здесь.
Re[20]: partial methods
От: Codealot Земля  
Дата: 15.11.24 18:02
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

S> Зачем мне 2 класса вместо одного? Зачем плодить сущности?


Классы экономить. Пц.

S>То есть видишь метод, но реально переопределяет этот метод 10 классов.


Синтаксически, ничем не должно отличаться.

S>И ничем не лучше partial классов.

S> Чем abstract или интерфейс лучше partial?

Тем, что решают ту же задачу и не нужно загромождать язык.
Ад пуст, все бесы здесь.
Re[21]: partial methods
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.11.24 18:42
Оценка: :)
Здравствуйте, Codealot, Вы писали:

S>> Зачем мне 2 класса вместо одного? Зачем плодить сущности?


C>Классы экономить. Пц.

Зачем на пустом месте плодить классы?

то есть вместо partial method нужно еще создавать класс наследник с реализацией метода.
Ты батенька мазохист.

Еще раз partial method только для удобства чтения класса. Всё!
Могу и не писать или удалить без последствий.
SG и так сгенерит реализацию метода.

А вот с классом наследником так не получится!



S>>То есть видишь метод, но реально переопределяет этот метод 10 классов.

C>Синтаксически, ничем не должно отличаться.
Синтаксически да, а реализация разная
S>>И ничем не лучше partial классов.
S>> Чем abstract или интерфейс лучше partial?

C>Тем, что решают ту же задачу и не нужно загромождать язык.

Вот именно, что абстракт и загромождают.
А partial расширяют. Но как видно тебе это не понять.
Например реально для C# важнее быстрое написание SG через макросы.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 15.11.2024 18:48 Serginio1 . Предыдущая версия . Еще …
Отредактировано 15.11.2024 18:44 Serginio1 . Предыдущая версия .
Re[22]: partial methods
От: Codealot Земля  
Дата: 15.11.24 19:43
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

S> Зачем на пустом месте плодить классы?


Реально пц. Классы не тот ресурс, который нужно экономить.

S>Но как видно тебе это не понять.


Да, умом это не понять.
Ад пуст, все бесы здесь.
Re[23]: partial methods
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.11.24 20:42
Оценка: :)
Здравствуйте, Codealot, Вы писали:

S>> Зачем на пустом месте плодить классы?


C>Реально пц. Классы не тот ресурс, который нужно экономить.

Экономить не надо, а вот читать сложнее.
Кроме того методы могут быть приватными или вообще методами класса внутри класса.
и солнце б утром не вставало, когда бы не было меня
Re[24]: partial methods
От: Codealot Земля  
Дата: 15.11.24 22:03
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

S> Экономить не надо, а вот читать сложнее.


Охренеть как сложнее.

S> Кроме того методы могут быть приватными или вообще методами класса внутри класса.


Это ты уже начал подгонять условия задачи под решение.
Ад пуст, все бесы здесь.
Re[11]: partial methods
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.11.24 09:11
Оценка: +1
Здравствуйте, Codealot, Вы писали:

P>>Малеха пропустили, и ваш метод повис в воздухе.


C>Непонятно, что ты хотел сказать.


Вы предлагаете подробить класс на цепочку наследования, которую надо теперь мейнтейнить руками. Три файла — три класса. Ошибаетесь в имени, наследуете 3й от 1го и приплыли.

В случае с partial вы доопределяете метод ровно там, где это нужно. Эдакий плагин.

Теперь интереснее — покажите, как вы собираетесь ваш генеренный код инстанцировать из другого генеренного кода
Подробно — как генератор узнает, что через год вы допишете наследование и нужно будет инстанцировать тот а не этот.

В нашем случае все просто — new XxxComponent()
Или делаем метод-фабрику, который тоже partial.

В вашем случае надо городить огород — пилить целый слой поверх, все перенаследовать.

Вот, минимум телодвижений
    partial void OnCreateProduct(ref Product product, string name);

    public Product CreateProduct(string name)
    {
        Product product = new Product(name);
        
        OnCreateProduct(ref product, name);
        
        return product;
    }

    ...

    partial void OnCreateProduct(ref Product product, string name)
    {
        product = new Product("a test");
    }
Отредактировано 18.11.2024 7:38 Pauel . Предыдущая версия . Еще …
Отредактировано 16.11.2024 9:20 Pauel . Предыдущая версия .
Re: partial methods
От: okon  
Дата: 17.11.24 04:53
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Какая-то очень мутная фича. Решение крайне узкой задачи, которую можно решить другими методами.

C>Или я то-то упускаю?

очень удобная фича когда делаешь свой кодогенератор, когда есть автогенеренный класс и нужно немного расширить его функциональность, не создавая при этом виртуальных методов.
partial class, partial метод очень подходят для этого.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re[12]: partial methods
От: Codealot Земля  
Дата: 19.11.24 16:17
Оценка: :)
Здравствуйте, Pauel, Вы писали:

P>Три файла — три класса.


Зачем три?

P>Ошибаетесь в имени, наследуете 3й от 1го и приплыли.


С такими ошибками, надо искать другую работу.
Ад пуст, все бесы здесь.
Re[2]: partial methods
От: Codealot Земля  
Дата: 19.11.24 16:17
Оценка:
Здравствуйте, okon, Вы писали:

O>не создавая при этом виртуальных методов.


Зачем, собственно?
Ад пуст, все бесы здесь.
Re[3]: partial methods
От: amironov79  
Дата: 20.11.24 06:37
Оценка: :)
Здравствуйте, Codealot, Вы писали:

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


O>>не создавая при этом виртуальных методов.


C>Зачем, собственно?


А зачем их собственно создавать, если можно без них? Посмотри например на реализации StronglyTypedId на sg, и расскажи как их реализовать при помощи виртуальных методов и что будет в этом случае с производительностью. Ну или посмотри на nswag openapi2csclient, который генерит http-клиента, готового к использованию, а если его надо расширить, то достаточно реализовать несколько partial методов без наследования и изменения имени класса.
Re[4]: partial methods
От: Codealot Земля  
Дата: 20.11.24 15:21
Оценка:
Здравствуйте, amironov79, Вы писали:

A>А зачем их собственно создавать, если можно без них?


А зачем собственно создавать частичные методы, если можно без них?
Ад пуст, все бесы здесь.
Re[5]: partial methods
От: amironov79  
Дата: 21.11.24 04:31
Оценка: :)
Здравствуйте, Codealot, Вы писали:

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


A>>А зачем их собственно создавать, если можно без них?


C>А зачем собственно создавать частичные методы, если можно без них?


Если тебя не удовлетворяют ответы из этой ветки, тогда лучше задать этот вопрос на гитхабе C#, там архитекторы языка обитают, они точно в курсе истинных причин
Re[5]: partial methods
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.11.24 07:26
Оценка:
Здравствуйте, Codealot, Вы писали:

A>>А зачем их собственно создавать, если можно без них?


C>А зачем собственно создавать частичные методы, если можно без них?


Codealot не читатель. В свое время T4 и SG работали только в компайл тайме.
Поэтому и нужны были partial methods. Сейчас SG работает design-time поэтому partial methods не особо то и нужны.
Да для быстроты нужно кэшировать проверять изменения.
Можно для себя для удобочитаемости в маленьких классах добавлять partial methods.
и солнце б утром не вставало, когда бы не было меня
Re[6]: partial methods
От: Codealot Земля  
Дата: 21.11.24 16:42
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

S>Поэтому и нужны были partial methods.


Никто так и не смог внятно объяснить, почему нельзя было использовать просто виртуальные методы. Ну, кроме "не хочу их использовать вот и всё".
Ад пуст, все бесы здесь.
Re[6]: partial methods
От: Codealot Земля  
Дата: 21.11.24 16:43
Оценка:
Здравствуйте, amironov79, Вы писали:

A>Если тебя не удовлетворяют ответы из этой ветки, тогда лучше задать этот вопрос на гитхабе C#, там архитекторы языка обитают, они точно в курсе истинных причин


Там вовсе не небожители, как тебе кажется.
Ад пуст, все бесы здесь.
Re[7]: partial methods
От: karbofos42 Россия  
Дата: 21.11.24 19:01
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Никто так и не смог внятно объяснить, почему нельзя было использовать просто виртуальные методы. Ну, кроме "не хочу их использовать вот и всё".


У меня до генераторов руки пока так и не дошли, так что возможно напишу глупость.
В моём понимании смысл в том, что пишешь:
class MyModel
{
  public int Property {get; set;}

  [ToGenerate]
  public partial int ProcessingToInt(string arg);
  [ToGenerate]
  public partial float ProcessingToFloat(string arg);
}

генератор по понятному ему атрибуту найдёт этот не реализованный метод, получит прототип (название, входные параметры, возвращаемый тип данных, область видимости) и реализует нужное тело метода.
В итоге дальше спокойно создаёшь объекты классы MyModel и работаешь с ними, вызываешь сгенерированные методы как самописные.
Если partial заменить на abstract, то получится, что генератору нужно будет создать целый новый класс-наследник, где будет реализован этот метод.
А значит нужно потом создавать везде объекты не MyModel, а сгенерированного наследника MyModelGenerated, чтобы дёргать этот виртуальный метод, что не есть удобно.
Если менять на virtual, то не понятно как это должно работать. Ну, разве что можно пустую реализацию самому писать с throw new NotImplementedException(), а генератор отработает как для abstract с созданием наследника и теми же сопутствующими неудобствами.
Если я ошибаюсь и генераторы так не умеют, то непонятно зачем они такие нужны
Re[8]: partial methods
От: Codealot Земля  
Дата: 21.11.24 19:51
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>теми же сопутствующими неудобствами


В чем неудобства, собственно говоря? Тоже хочешь экономить классы?
Ад пуст, все бесы здесь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.