27.08.2020, 18:37 | #21 |
Участник
|
Абсолютно согласен. И некоторые классы можно и нужно писать иммутабельными. Например класс AifEntityKey вполне можно было сразу сделать иммутабельным. В конструктор new забить поля TableId и FieldId и запретить их менять. Совершенно ясно, что мы не будем менять их в процессе жизни класса. Проще создать уже новый экземпляр и работать с ним.
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
27.08.2020, 18:40 | #22 |
Участник
|
Прошу прощения, еще не имел возможности работать в D365.
__________________
// no comments |
|
28.08.2020, 00:02 | #23 |
Участник
|
Цитата:
Сообщение от mazzy
вот, что угодно, лишь бы не делать в C# именованные параметры.
https://kotlinlang.ru/docs/reference/functions.html |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
28.08.2020, 00:29 | #24 |
Участник
|
Спасибо.
Значит, в версии 4, в конце 2008 года появились "Именованные и опциональные параметры". А в версии 3 появились инициализаторы, в 2007. https://ru.wikipedia.org/wiki/C_Sharp Макс, скажи, а как сейчас принято среди разработчиков использовать инициализаторы и параметры конструкторов? и насколько подобные конструкции понимают/используют всякие генераторы кода типа wsdl.exe? (сознательно сформулировал в самом широком виде - расскажи что считаешь нужным, будет интересно) а то я щас код, связанный с WCF вижу. А это явно до 2008 года разрабатывалось. Последний раз редактировалось mazzy; 28.08.2020 в 00:40. |
|
28.08.2020, 14:03 | #25 |
Участник
|
У нас обычно используется несколько оверлоадов для конструкторов для наиболее частых случаев. Параметры по умолчанию в C# почти не используем потому, что дефолтные значения параметры вкомпилируются в вызывающий код и расширение набора параметров - binary breaking change.
Для необязательных свойств и свойств которые используют нечасто - property initializers. Особенно удобно в тестах. См. также С# 9 primary constructors С кодогенерацией лично я не особо сталкивался. В C# есть partial classes, которые позволяют держать генерированный код отдельно от написанного ручками и смотрtть в него наверное, надо только при отладке. В этом случае, может и лучше, если он написан c использованием возможностей языка, но не принципиально. Еще интересный стиль в maui Пример теста с сокращениями. X++: [TestMethod] public void TestRunUnattended_IfExecutionDeferredInXML_CanCollectDataInAdvance() { ... var delayedSequence = new ERTextFormatXMLElement(DelayedElementName) { IsDeferred = true }; .... var root = new ERTextFormatXMLElement(RootName) { delayedSequence, detailsComponent }; var mapping = new ERFormatMapping(); ... mapping.ParmBinding(new ERFormatBinding{ {delayedSequence, ListItem(CollectedListName)}, {delayedString, StringItem(CollectedListName, ERSingleValueDataContainerList.ValueName)}, {detailsComponent, ListItem(SourceListName)}, ... }); var contentAsString = RunAndReturnDestinationContent(mapping); var expected = new XDocument( new XElement(RootName, new XElement(DelayedElementName, FirstKey), new XElement(DelayedElementName, SecondKey), new XElement(DetailsComponentName, DetailsPrefix + FirstKey), new XElement(DetailsComponentName, DetailsPrefix + SecondKey))); XDocument.Parse(contentAsString) .Should().BeEquivalentTo(expected); } X++: readonly State<int> count = 0; [Body] View body() => new StackLayout { new Label("Welcome to .NET MAUI!"), new Button( () => $"You clicked {count} times.", () => count.Value ++) ) }; |
|
|
За это сообщение автора поблагодарили: mazzy (2). |