Re: partial methods
От: diez_p  
Дата: 29.10.24 21:45
Оценка: +1
Здравствуйте, Codealot, Вы писали:

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

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

Вы ее просто не умеете готовить, в partial можно абсолютно просто всунуть любой генереный код, а смысловой оставить, при этом снаружи класс будет выглядеть как обычно.
Наследование тут вообще неуместно в принципе, т.к. потомков может быть в принципе много

Но вся нагрузка ключевого слова partial склеить два файла.
MS это использовал как в вин формах и было очень удобно, так по моему и в WPF, можно наверное DTO, протобафа нагенерить ну и прочее.
Re[2]: partial methods
От: Codealot Земля  
Дата: 29.10.24 21:51
Оценка:
Здравствуйте, diez_p, Вы писали:

_>Наследование тут вообще неуместно в принципе, т.к. потомков может быть в принципе много


Расшифруй.
Ад пуст, все бесы здесь.
Re[2]: partial methods
От: rFLY  
Дата: 29.10.24 22:17
Оценка: :)
Здравствуйте, rFLY, Вы писали:

Что тебя повеселило или к шаред проджект у тебя тоже вопросы есть?
Re[3]: partial methods
От: Codealot Земля  
Дата: 29.10.24 22:42
Оценка: :)
Здравствуйте, rFLY, Вы писали:

FLY>Что тебя повеселило


Твоя незамутненная гордость тривиальными знаниями.
Ад пуст, все бесы здесь.
Re[4]: partial methods
От: rFLY  
Дата: 29.10.24 22:58
Оценка: +1
Здравствуйте, Codealot, Вы писали:

C>Твоя незамутненная гордость тривиальными знаниями.

Ты на протяжении всего топика спрашиваешь "нафига?". Вариант с автогенерацией тебя не удовлетворил, я предложил другое применение.
Причем тут моя гордость и мои знания я хз
Re[5]: partial methods
От: Codealot Земля  
Дата: 29.10.24 23:09
Оценка:
Здравствуйте, rFLY, Вы писали:

FLY>Ты на протяжении всего топика спрашиваешь "нафига?". Вариант с автогенерацией тебя не удовлетворил, я предложил другое применение.

FLY>Причем тут моя гордость и мои знания я хз

Переформулирую: нафига это было нужно на уровне языка, а не просто библиотеки? Что там были за нерешаемые проблемы?
Ну и заодно другие сообщения почитай.
Ад пуст, все бесы здесь.
Re[6]: partial methods
От: rFLY  
Дата: 29.10.24 23:23
Оценка: +2
Здравствуйте, Codealot, Вы писали:

C>Переформулирую: нафига это было нужно на уровне языка, а не просто библиотеки?

Каким образом ты это на уровне библиотеки собрался решать?

C>Что там были за нерешаемые проблемы?

А какие проблемы решает var или оператор +=? Зачем его ввели, когда можно написать a = a + b?

C>Ну и заодно другие сообщения почитай.

Читал, но так и не понял причину твоего хейта к этим методам.
Re[5]: partial methods
От: Doom100500 Израиль  
Дата: 30.10.24 06:55
Оценка:
Здравствуйте, Codealot, Вы писали:

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


RD>>Ну а зачем заводить лишний уровень абстракции, если можно без него обойтись?


C>Пц. А это ничего, что ради этого бзика пришлось заводить целую новую фичу языка, которая вероятно будет нужна 0.0001% рарзработчиков?


Когда мы переделылавали UI, нам майковские советчики посоветовали WPF с модной тогда аритектурой MVC. Дали курс, и, вместе с нами, где-то полгода делали каркас нашей непростой системы с кучей паармеров и сценариев использования.
Controller, втолне ожидаемо превратился в God Object, который эти соватчики нам разбросали в partial class не только по разным файлам, но даже по поддиректориям, с иерархией и именами, соответствующим каким — либо сценариям.

Это потом уже все признали какой это отстой и все ринулись всё переделывать на MVVM. Но GodController живёт, и умереть у него не выйдет.
Спасибо за внимание
Re: partial methods
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.10.24 09:23
Оценка:
Здравствуйте, Codealot, Вы писали:

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

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

Extending Partial Methods
SourceGenerators & partial methods

Это фича нужна прежде всего для SourceGenerators.
и солнце б утром не вставало, когда бы не было меня
Re[5]: partial methods
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.10.24 09:27
Оценка:
Здравствуйте, Codealot, Вы писали:

RD>>Ну а зачем заводить лишний уровень абстракции, если можно без него обойтись?


C>Пц. А это ничего, что ради этого бзика пришлось заводить целую новую фичу языка, которая вероятно будет нужна 0.0001% рарзработчиков?


Ты видишь суслика — нет. А он есть. Сейчас в связи с Native AOT Source Generator прикручивают везде где нужно изменять поведение классов на этапе компиляции.

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/native-aot?view=aspnetcore-8.0
https://learn.microsoft.com/ru-ru/dotnet/standard/serialization/system-text-json/source-generation?pivots=dotnet-8-0
и солнце б утром не вставало, когда бы не было меня
Отредактировано 30.10.2024 9:38 Serginio1 . Предыдущая версия . Еще …
Отредактировано 30.10.2024 9:30 Serginio1 . Предыдущая версия .
Re[12]: partial methods
От: Codealot Земля  
Дата: 30.10.24 15:39
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>А partial methods, имхо, запилили чисто за компанию. Типа, а чё прикольно и сделать несложно. А давайте прикрутим? А давайте!


Хотя, больше похоже, что кто-то сделал эту фичу чисто под себя. Под свою задачу и религиозные бзики.
Ад пуст, все бесы здесь.
Re[6]: partial methods
От: Codealot Земля  
Дата: 30.10.24 15:39
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Ты видишь суслика — нет. А он есть. Сейчас в связи с Native AOT Source Generator прикручивают везде где нужно изменять поведение классов на этапе компиляции.


И где там хоть одно упоминание partial methods?
Ад пуст, все бесы здесь.
Re[7]: partial methods
От: Codealot Земля  
Дата: 30.10.24 15:41
Оценка:
Здравствуйте, rFLY, Вы писали:

FLY>Каким образом ты это на уровне библиотеки собрался решать?


Что конкретно решать? Приведи пример.

FLY>А какие проблемы решает var или оператор +=? Зачем его ввели, когда можно написать a = a + b?


Синтаксический сахарок. Который используется часто, в отличие от.

FLY>Читал, но так и не понял причину твоего хейта к этим методам.


Очень нелепые.
Ад пуст, все бесы здесь.
Re[2]: partial methods
От: Codealot Земля  
Дата: 30.10.24 15:50
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Это фича нужна прежде всего для SourceGenerators.


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


S>> Ты видишь суслика — нет. А он есть. Сейчас в связи с Native AOT Source Generator прикручивают везде где нужно изменять поведение классов на этапе компиляции.


C>И где там хоть одно упоминание partial methods?


Нет. Но там куча методов генерится.

https://github.com/dotnet/runtime/blob/main/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerContext.cs

jsonString = JsonSerializer.Serialize(
    weatherForecast!, SourceGenerationContext.Default.WeatherForecast);
и солнце б утром не вставало, когда бы не было меня
Re[3]: partial methods
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.10.24 18:55
Оценка:
Здравствуйте, Codealot, Вы писали:

S>>Это фича нужна прежде всего для SourceGenerators.


C>Вполне очевидно, что оно было сделано для кодогенерации.

C>Тот же вопрос, что и раньше — что мешало использовать для решения этой задачи существующие средства языка?
Ну единственное решение это абстрактный класс.
Но иногда проще вместо генерации наследника, проще использовать существующий класс, а специализацию уже делать при компиляции.
По сути это аналог шаблонов С++, но с интеллисенсе и статической типизацией.
и солнце б утром не вставало, когда бы не было меня
Re[8]: partial methods
От: Codealot Земля  
Дата: 30.10.24 20:01
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Нет. Но там куча методов генерится.


То есть, без partial methods прекрасно можно обойтись?
Ад пуст, все бесы здесь.
Re[4]: partial methods
От: Codealot Земля  
Дата: 30.10.24 20:03
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Ну единственное решение это абстрактный класс.


Думаю, можно и другие найти. Опять же, чем плох абстрактный класс?

S> По сути это аналог шаблонов С++, но с интеллисенсе и статической типизацией.


И с очень ограниченной областью применения.
Ад пуст, все бесы здесь.
Re[6]: partial methods
От: Sharov Россия  
Дата: 31.10.24 07:31
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>А дальше с появлением source generator'ов эта фича вышла на новый уровень:

RD>
RD>// Генерация кода конечного автомата на C#
RD>[GeneratedRegex("cat|dog", RegexOptions.IgnoreCase, "en-US")]
RD>private static partial Regex CatOrDogGeneratedRegex();
RD>// Генерация кода маппинга
RD>[Mapper]
RD>public partial class CarMapper
RD>{
RD>    public partial CarDto CarToCarDto(Car car);
RD>}
RD>


Вопрос, а как определяется порядок компиляции partial методов? Из какого partial метода код
раньше\позже? Я это понимаю так, что в конце все partial методы превращаются в один метод, не partial.
Как это происходит?

ЗЫ: Про partial классы безусловно знаю, ибо долго работал с winforms, а вот про методы ничего не знаю,
не доводилось применять.
Кодом людям нужно помогать!
Re[7]: partial methods
От: RushDevion Россия  
Дата: 31.10.24 08:24
Оценка: 10 (1) +2
S>Вопрос, а как определяется порядок компиляции partial методов? Из какого partial метода код
S>раньше\позже? Я это понимаю так, что в конце все partial методы превращаются в один метод, не partial.

Если я правильно понял вопрос, то речь о чем-то таком?
// MyClass.cs
public partial class MyClass
{
    public void Action()
    {
        BeforeAction();
    }

    partial void BeforeAction();
}

// MyClass.Partial1.cs
public partial class MyClass
{
    partial void BeforeAction() 
    {
       Console.WriteLine("First");
    }
}

// MyClass.Partial2.cs
public partial class MyClass
{
    partial void BeforeAction() 
    {
       Console.WriteLine("Second");
    }
}

Это не скомпилируется. Будет ошибка: "A partial method may not have multiple defining declarations"

S>Как это происходит?

Очень просто. Сводим все partial-файлы для типа в один, заменяя partial definition на partial declaration.

И, кстати, в отличие от virtual/override, partial работает только в рамках текущей сборки (текущего проекта).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.