advantages of immutable objects c#