Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Somescout, Вы писали:
S>>Не записи, просто способ объявления полей класса в конструкторе, чтобы вместо:
НС>Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея.
Я так понимаю читать комментарии тут так и не научились.
Здравствуйте, Somescout, Вы писали:
НС>>Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея. S>Я так понимаю читать комментарии тут так и не научились.
Когда по делу сказать нечего — непременно надо нахамить?
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Somescout, Вы писали:
НС>>>Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея. S>>Я так понимаю читать комментарии тут так и не научились.
НС>Когда по делу сказать нечего — непременно надо нахамить?
Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI? Я просто реально не понимаю: вы сами цитируете предложение где я пишу "Не записи, просто способ объявления полей класса в конструкторе" и тут же "Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея." — я от такого сочетания впал в состояние удивления.
S>Мелкая экономия в принципе, но устраняет постоянно повторяющийся код.
Если я правильно понимаю, то так — нельзя.
Можно — вот так:
public class Test(DBContext DbContext, ADContext AdContext)
{
...
}
Тогда конструктор с этими параметрами сгенерируется автоматически вместе с одноимёнными init-only свойствами. Но они будут публичными, а не приватными.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
S>Тогда конструктор с этими параметрами сгенерируется автоматически вместе с одноимёнными init-only свойствами. Но они будут публичными, а не приватными.
Здравствуйте, Somescout, Вы писали:
S>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI?
Почему "вместо"?
S> Я просто реально не понимаю
Все ты понимаешь. Просто тут в форуме последние годы прям какая то эпидемия неспособности воспринимать другие точки зрения. Чуть что не так — в ответ прям фонтаны грубостей и хамства.
S>: вы сами цитируете предложение где я пишу "Не записи, просто способ объявления полей класса в конструкторе" и тут же "Рекорды предназначены для сценария DTO.
Молодец. Должно было намекнуть вроде бы, что все я прочел. Но нет.
Попробуй прочесть название темы.
Здравствуйте, Ночной Смотрящий, Вы писали:
S>>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI? НС>Почему "вместо"?
Facepalm... Попробуйте прочесть ветку комментариев сначала.
НС>Все ты понимаешь. Просто тут в форуме последние годы прям какая то эпидемия неспособности воспринимать другие точки зрения. Чуть что не так — в ответ прям фонтаны грубостей и хамства.
Ещё раз: вы не прочитав написанное кинулись рассказывать зачем нужны записи. Ваше право, моё право это отметить.
S>>: вы сами цитируете предложение где я пишу "Не записи, просто способ объявления полей класса в конструкторе" и тут же "Рекорды предназначены для сценария DTO.
НС>Молодец.
Хамство вас возмущает, но панибратское отношение для вас норма.
НС>Должно было намекнуть вроде бы, что все я прочел. Но нет.
Но да. Вы не прочли и сейчас изворачиваетесь, пытаясь доказать что всё равно правы.
НС>Попробуй прочесть название темы.
Ветку комментариев попробуйте прочесть сначала.
Здравствуйте, Somescout, Вы писали:
S>>>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI? НС>>Почему "вместо"? S>Facepalm... Попробуйте прочесть ветку комментариев сначала.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Somescout, Вы писали:
S>>>>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI? НС>>>Почему "вместо"? S>>Facepalm... Попробуйте прочесть ветку комментариев сначала.
НС>Т.е. ответить на вопрос ты не можешь. ЧТД.
Могу: потому что мне не нужны записи, мне нужен именно такой синтаксический сахар, т.к. он весьма удобен, и может применяться в куда большем количестве случаев, чем записи. И если бы вы всё-же читали предыдущие сообщения, то вы бы это и так поняли.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Somescout, Вы писали:
НС>>>Т.е. ответить на вопрос ты не можешь. ЧТД. S>>Могу: потому что мне не нужны записи
НС>Ну зашибись. Т.е. ты решил обсудить какую то другую тему, и при этом у тебя хватает наглости обвинять других что они послушно тему не сменили?
То, что речь идёт не о записях написано в самом начале. Если бы вы... ну да ладно.
НС>и при этом у тебя хватает наглости обвинять других что они послушно тему не сменили?
Я так понимаю это тоже не хамство?
Здравствуйте, Somescout, Вы писали:
НС>>и при этом у тебя хватает наглости обвинять других что они послушно тему не сменили? S>Я так понимаю это тоже не хамство?
О как ты вдруг о хамстве заговорил. А чего с самого начала не вспомнилось то, когда ты хамить начал потому что тебе что то там показалось?
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>О как ты вдруг о хамстве заговорил. А чего с самого начала не вспомнилось то, когда ты хамить начал потому что тебе что то там показалось?
Я так понимаю по теме вам нечего было сказать с самого начала. Удачи.
Здравствуйте, Somescout, Вы писали:
НС>>О как ты вдруг о хамстве заговорил. А чего с самого начала не вспомнилось то, когда ты хамить начал потому что тебе что то там показалось? S>Я так понимаю по теме вам нечего было сказать с самого начала. Удачи.
Здравствуйте, Yuri Abele, Вы писали:
YA>Поделитесь пожалуйста, кто их практически применяет — где, для чего?
Для функционального программирования. Рекорды — это немного кривенькая, но реализация (в сочетании с наследованием и кортежами) концепции алгебраических типов данных.
using System;
public abstract record Color
{
public sealed record Rgb(int R, int G, int B) : Color;
public sealed record Black : Color;
public sealed record Red : Color;
public sealed record Yellow : Color;
public void Print()
{
Console.WriteLine(this switch
{
Black black => "Черный",
Rgb { R: 0xFF, G: 0, B: 0 } => "Красный",
Red red => "Красный",
Yellow yellow => "Желтый",
Rgb(var r, var g, var b) => $"RGB({r:X2},{g:X2},{b:X2})",
_ => throw new ArgumentOutOfRangeException()
});
}
}
internal static class Program
{
private static void Main()
{
new Color.Rgb(0xFF, 0, 0).Print();
new Color.Rgb(0, 0xFF, 0).Print();
new Color.Red().Print();
}
}
Выводит:
Красный
RGB(00,FF,00)
Красный
Что касается использования записей при доступе к базам данных, то тут вопрос в движке. Если использовать linq2db, а не EF, проблем с записями быть не должно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>public abstract record Color
VD>{
VD> public sealed record Rgb(int R, int G, int B) : Color;
VD>
Наркоманы
: Color это типа public Rgb():base(){} + class Rgb: Color
теперь вижу пример в документации. я сначала подумал, что это уточнение типа из немерл.
Rgb выглядит как поле при первом знакомстве, уже второй раз у меня когнитивный диссонанс. первый раз было когда к инструкции switch добавили выражение switch но с другими правилами.
Ну, не могли же они без криатива? Иначе как объяснить убитые без малого 20 лет на это мудрое решение? В Немерле то все это было из коробки еще в 2003-ем.
vaa>: Color это типа public Rgb():base(){} + class Rgb: Color
Ну, вкладывать типы не обязательно. Это я уж для изоляции имен и для схожести с Немерлом (он именно так код генерит).
А кривость этого всего в том, что тип "не закрыт". В Немерле ты описываешь закрытый набор подтипов и компилятор может проверить полноту при паттерн-матчинге (сказать, что тот или иной вариант пропущен).
vaa>теперь вижу пример в документации. я сначала подумал, что это уточнение типа из немерл.
Не, это обычное шарпное наследование. Просто тела нет и по этому выглядит странно. Можно и так:
public sealed record Black : Color
{
}
На Немерле оно выглядит, конечно, по концептуальнее, так как для АлгТД есть прямая поддержка в виде вариантов:
using System;
public variant Color
{
| Rgb { R : int; G : int; B : int; }
| Black
| Red
| Yellow
public Print() : void
{
Console.WriteLine(
match (this)
{
| Rgb(0xFF, 0, 0) => "Красный"
| Black => "Черный"
| Red => "Красный"
| Yellow => "Желтый"
| Rgb(r, g, b) => $"RGB($r,$g,$b)"
});
}
}
module Program
{
Main() : void
{
Color.Rgb(0xFF, 0, 0).Print();
Color.Rgb(0, 0xFF, 0).Print();
Color.Red().Print();
}
}
vaa>Rgb выглядит как поле при первом знакомстве, уже второй раз у меня когнитивный диссонанс. первый раз было когда к инструкции switch добавили выражение switch но с другими правилами.
Ну, это дело привычки. Думаю через пару дней использования диссонанс пройдет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.