Eric Lippert m'a dit que je devrais "essayez de toujours faire des types de valeur immuable", alors j'ai pensé que je devrais essayer de toujours faire des types de valeur immuable.
Mais, je viens de trouver cette mutable struct, System.Web.Util.SimpleBitVector32
, en System.Web
de l'assemblée, qui me fait penser qu'il doit y avoir une bonne raison pour avoir une mutable struct. Je devine la raison qu'ils n'ont cela de cette façon c'est parce qu'il fait mieux à l'essai, et ils l'ont gardé interne pour décourager son utilisation abusive. Cependant, c'est de la spéculation.
J'ai C&P, la source de cette structure. Qu'est-ce qui justifie la décision d'utiliser une mutable struct? En général, ce genre de avantages peuvent être obtenus par l'approche et quand ces avantages assez importants pour justifier les éventuels inconvénients?
[Serializable, StructLayout(LayoutKind.Sequential)]
internal struct SimpleBitVector32
{
private int data;
internal SimpleBitVector32(int data)
{
this.data = data;
}
internal int IntegerValue
{
get { return this.data; }
set { this.data = value; }
}
internal bool this[int bit]
{
get {
return ((this.data & bit) == bit);
}
set {
int data = this.data;
if (value) this.data = data | bit;
else this.data = data & ~bit;
}
}
internal int this[int mask, int offset]
{
get { return ((this.data & mask) >> offset); }
set { this.data = (this.data & ~mask) | (value << offset); }
}
internal void Set(int bit)
{
this.data |= bit;
}
internal void Clear(int bit)
{
this.data &= ~bit;
}
}