Может ли C# помочь мне написать неизменяемый класс, который использует функции-члены With, возвращающие измененные объекC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Может ли C# помочь мне написать неизменяемый класс, который использует функции-члены With, возвращающие измененные объек

Сообщение Anonymous »

У меня есть неизменяемый класс, определенный примерно с шестью свойствами. Это упрощенная версия:

Код: Выделить всё

public class MyImmutableClass
{
public int MyInteger { get; }
public string MyString { get; }

private MyImmutableClass(int myInteger, string myString)
{
this.MyInteger = myInteger;
this.MyString = myString;
}

public static MyImmutableClass Empty()
=> new MyImmutableClass(0, "");

public MyImmutableClass WithMyInteger(int newMyInteger)
=> new MyImmutableClass(newMyInteger, this.MyString);

public MyImmutableClass WithMyString(string newMyString)
=> new MyImmutableClass(this.MyInteger, newMyString);
}
Это позволяет мне писать такой код:

Код: Выделить всё

var x = MyImmutableClass.Empty().WithMyInteger(12).WithMyString("Hello");
и функции расширения позволяют мне писать более полезные функции «С», которые вызывают эти базовые функции. Различные функции With — это прекрасная возможность проверить эти параметры в одном месте.
Проблема в том, что каждое свойство требует немалого обслуживания. Для каждого свойства, которое я хочу добавить, мне нужно внести эти изменения...
  • Добавьте новое свойство get вверху.
    Частному конструктору нужен новый параметр.
  • Частному конструктору необходимо установить для нового свойства значение нового параметра.
  • Функция Empty должна предоставить значение по умолчанию для нового параметра конструктора.
  • Каждая из уже существующих функций «With» должна добавить this.NewProperty , чтобы скопировать значение свойства старого объекта в новое.
  • Напишите новую функцию WithNewProperty, которая копирует все значения свойств существующего объекта в частный конструктор вместе с новым значением параметра.
Это очень большая работа для выполнения шаблона, который кажется очень механическим. Я часто подумывал о том, чтобы заняться генерацией кода или даже заменить все эти свойства словарем.
Может ли мне помочь современный C#? Есть ли способ определить этот шаблон неизменяемого класса с набором свойств, и я считаю, что описанное выше обслуживание полностью автоматическое?
(Функция MemberwiseClone досадно завершен и не имеет варианта «кроме этого».)

Подробнее здесь: https://stackoverflow.com/questions/784 ... unctions-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»