Есть ли простой способ создать неизменяемую версию класса?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли простой способ создать неизменяемую версию класса?

Сообщение Anonymous »

Есть ли простой способ сделать экземпляр неизменяемым?

Давайте рассмотрим пример: у меня есть класс, содержащий множество полей данных (только данные, никакого поведения). ):

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

class MyObject
{
// lots of fields painful to initialize all at once
// so we make fields mutable :

public String Title { get; set; }
public String Author { get; set; }

// ...
}
Пример создания:

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

MyObject CreationExample(String someParameters)
{
var obj = new MyObject
{
Title = "foo"
// lots of fields initialization
};

// even more fields initialization
obj.Author = "bar";

return obj;
}
Но теперь, когда я полностью создал свой объект, я больше не хочу, чтобы объект был изменяемым (поскольку потребителю данных никогда не потребуется менять состояние), поэтому мне бы хотелось что-то вроде этого List.AsReadOnly:

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

var immutableObj = obj.AsReadOnly();
Но если мне нужно такое поведение, мне нужно создать другой класс с точно такими же полями, но без установщика.

Итак, существует ли какой-нибудь автоматический способ создания этого неизменяемого класса? Или другой способ разрешить изменчивость во время создания, но неизменность после инициализации?

Я знаю, что поля можно пометить как «только для чтения», но объект будет инициализирован вне класса. , а передача всех полей в качестве параметров конструктора кажется плохой идеей (слишком много параметров).

Подробнее здесь: https://stackoverflow.com/questions/261 ... of-a-class
Ответить

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

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

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

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

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