public class LogMessage
{
public LogMessage(string message, bool isError)
{
Message = message;
IsError = isError;
}
public string Message { get; private set; }
public bool IsError { get; private set; }
}
考虑上面的代码。有没有这种类不能成为完全不可变对象的情况?如果没有,为什么呢?
答案 0 :(得分:3)
您可以使用反射(或无法验证的IL)修改该类。不在低信任环境中。
这是创建不可变对象的好模式。我喜欢那个班级。
我不知道.NET内存模型是否足够强大,以至于如果将该对象移交给另一个线程,它总是会看到它处于初始化状态。它可能会看到字段未初始化。在x86上,无论如何这是不可能的,因为商店充当障碍,你需要至少一个商店来发布一个对象。