Я пишу код в функциональном стиле на C#. Многие из моих классов неизменяемы с методами возврата измененной копии экземпляра.Универсальные классы неизмененного класса в C#
Например:
sealed class A
{
readonly X x;
readonly Y y;
public class A(X x, Y y)
{
this.x = x;
this.y = y;
}
public A SetX(X nextX)
{
return new A(nextX, y);
}
public A SetY(Y nextY)
{
return new A(x, nextY);
}
}
Это тривиальный пример, но представьте себе гораздо больший класс, со многими более членов.
Проблема в том, что построение этих модифицированных копий очень многословно. Большинство методов меняют только одно значение, но я должен передать все неизменных значений в конструктор.
Есть ли образец или техника, чтобы избежать всей этой котельной плиты при построении неизменяемых классов с помощью методов модификатора?
Примечание: я не хочу использовать struct
для reasons discussed elsewhere on this site.
Обновление: с тех пор я обнаружил, что это выражение «копирование и обновление записи» в F #.
Я бы поставил под сомнение необходимость иметь эти «сеттеры», поскольку вы написали их для всего. Действительно, вы должны выполнять сложные операции над типом, а не просто «устанавливать» значение произвольно. Для просто общей пары ему не нужно ничего, кроме конструктора. – Servy
@Servy Извините, это ограничение примера. Большинство модификаторов более сложны или зависят от конкретной задачи. Пожалуйста, представьте, что я дал лучший пример :) – sdgfsdh
Да. Используйте F #. Серьезно сейчас. C# - это, прежде всего, язык ООП с состоянием. Хотя у него есть некоторые функциональные возможности, это далеко не хороший функциональный язык. – Euphoric