Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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# - Fatal编程技术网

C# 为什么这个类在其内部被实例化?

C# 为什么这个类在其内部被实例化?,c#,C#,请帮我理解这个代码。这是否类似于使用对象而不是值的枚举?是否有术语或模式可以解释这个过程 public class State { private State(String value) { Value = value; } public String Value { get; set; } public static State Open => new State("Open"); public static Sta

请帮我理解这个代码。这是否类似于使用对象而不是值的枚举?是否有术语或模式可以解释这个过程

public class State
{
    private State(String value)
    {
        Value = value; 
    }

    public String Value { get; set; }

    public static State Open => new State("Open");

    public static State Closed => new State("Closed");

    public static State YourOpen => new State("YourOpen");

    public static State YourClosed => new State("YourClosed");
}

这似乎是一门课:

  • 允许使用自定义状态值创建实例(不可公开访问!)
  • 为自身实例提供预定义的值
  • 我忽略了私人建造师。正如@jacob krall所指出的,
    类型安全枚举(来自较旧的Java)似乎最适合。

    它是或实现,但不是创建子类,而是在类本身中创建方法

    在您给出的代码中,每个方法都会更改状态并返回更改状态的实例。表单
    打开>>关闭>>您的打开>>您的关闭


    我认为这是a的一个例子,它为一个类型定义了一个有限的选项列表。

    让我想起了
    System.Drawing.Color.Black
    真正的问题是“为什么
    Value
    不可变?”这对我来说似乎是完全合理的代码。这不是一个单例,但这种方法在单例模式中使用。它的状态模式…很明显,不允许您创建自己的此类实例(因此是私有构造函数),而是从定义的实例中进行选择,非常类似于枚举,具有复杂类型,因为枚举基本上是int。