Я видел этот шаблон в Enumerator.Он гарантирует, что коллекция не была изменена при перечислении элементов.
public class Versioned
{
internal int version = 0;
public void ThisBreaksVersion()
{
version++;
}
}
public class WorksOnVersioned
{
private readonly int version;
private readonly Versioned versioned;
public WorksOnVersioned(Versioned versioned)
{
this.versioned = versioned;
this.version = versioned.version;
}
public void DoWork()
{
if( version != other.version )
throw new Exception(); // Ooop.. Out of sync!
}
}
var v1 = new Versioned();
var w1 = WorksOnVersioned(v1);
w1.DoWork(); // Yup
var v2 = new Versioned();
var w2 = WorksOnVersioned(v2);
v2.ThisBreaksVersion();
w2.DoWork(); // v2 has changed -> exception!
Я также вижу, что это полезно при использовании общего ресурса, чтобы убедиться, что локальная копия такая же, какресурс.
Но как называется этот шаблон?Есть ли что-то еще, для чего это может быть полезно?