Вопрос прост. Может ли тип, который может изменить свое внутреннее состояние, не будучи видимым снаружи, считается непреложным?
Упрощенный пример:
public struct Matrix
{
bool determinantEvaluated;
double determinant;
public double Determinant
{
get //asume thread-safe correctness in implementation of the getter
{
if (!determinantEvaluated)
{
determinant = getDeterminant(this);
determinantEvaluated = true;
}
return determinant;
}
}
}
UPDATE: Уточнен вопрос безопасности потока, поскольку это вызывало отвлечение.