У меня есть класс, в котором я бы не хотел, чтобы его поля можно было менять. Не могу понять как это сделать. Такая конструкция не работает:
class Message
{
public readonly MessageType MessageType { private set; get; }
public readonly string Data { private set; get; }
public Message(MessageType type)
{
MessageType = type;
Data = null;
}
public Message(MessageType type, string data)
{
MessageType = type;
Data = data;
}
}
В C#, модификатор readonly применяется только к полям. Чтобы объявить свойство - только для чтения, достаточно просто опустить объявление сеттера.
private MessageType fMessageType;
public MessageType MessageType { get { return fMessageType; } }
// или так
public MessageType MessageType { get; private set; }
Кроме того, в C# 6 появилась возможность опускать сеттер даже у автореализованных свойств. Такое свойство нужно проинициализировать в конструкторе, или прямо при объявлении, как это делается с полями.
public class Test {
public string A { get; } = "B";
public Test() {
A = "A";
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости