Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举器中使用的这种设计模式是什么。?_C#_.net_Design Patterns - Fatal编程技术网

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!
在使用共享资源以确保本地副本与资源中的副本相同时,我还可以看到这一点非常有用


但这种模式叫什么?还有其他有用的东西吗?

我不知道有任何命名模式可以用于此-您可以称之为“版本快照”或类似的东西,其中重要的一点是,如果您感兴趣的只是知道是否更改了,那么您不需要对整个可变数据进行快照。(也就是说,快照只是变得无效,而不是面对原始快照的更改而保持不变。)

我不知道这方面有什么命名模式-您可以称之为“版本快照”或类似的东西,其中重要的一点是,如果您感兴趣的只是知道数据是否已更改,则不需要对整个可变数据进行快照。(即,快照只是变得无效,而不是面对原始快照的更改而保持不变。)

由于没有其他人应答,此模式现在称为“版本快照”:)由于没有其他人应答,此模式现在称为“版本快照”: