有没有可能这不是一成不变的

时间:2014-05-26 16:20:19

标签: c# thread-safety

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; }
}

考虑上面的代码。有没有这种类不能成为完全不可变对象的情况?如果没有,为什么呢?

1 个答案:

答案 0 :(得分:3)

您可以使用反射(或无法验证的IL)修改该类。不在低信任环境中。

这是创建不可变对象的好模式。我喜欢那个班级。

我不知道.NET内存模型是否足够强大,以至于如果将该对象移交给另一个线程,它总是会看到它处于初始化状态。它可能会看到字段未初始化。在x86上,无论如何这是不可能的,因为商店充当障碍,你需要至少一个商店来发布一个对象。