C# 枚举器中使用的这种设计模式是什么。?
我在枚举器中见过这种模式。它确保在枚举项时集合未被更改C# 枚举器中使用的这种设计模式是什么。?,c#,.net,design-patterns,C#,.net,Design Patterns,我在枚举器中见过这种模式。它确保在枚举项时集合未被更改 public class Versioned { internal int version = 0; public void ThisBreaksVersion() { version++; } } public class WorksOnVersioned { private readonly int version; private readonly Versioned
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!
在使用共享资源以确保本地副本与资源中的副本相同时,我还可以看到这一点非常有用
但这种模式叫什么?还有其他有用的东西吗?我不知道有任何命名模式可以用于此-您可以称之为“版本快照”或类似的东西,其中重要的一点是,如果您感兴趣的只是知道是否更改了,那么您不需要对整个可变数据进行快照。(也就是说,快照只是变得无效,而不是面对原始快照的更改而保持不变。)我不知道这方面有什么命名模式-您可以称之为“版本快照”或类似的东西,其中重要的一点是,如果您感兴趣的只是知道数据是否已更改,则不需要对整个可变数据进行快照。(即,快照只是变得无效,而不是面对原始快照的更改而保持不变。)由于没有其他人应答,此模式现在称为“版本快照”:)由于没有其他人应答,此模式现在称为“版本快照”: