为什么在此示例中枚举不需要创建对象?

Why doesn't enum require an object creation in this example?

我有一个图书馆。

namespace Defintnions
{
    public class skywave
    {
        public enum partnum : byte { assembled, configured };
        public readonly string partnum_assembled = "1234B";
    }
}

我正在同一解决方案的另一个项目中对其进行测试。

using Defintnions;


namespace ConsoleApplication1
{
    class MainEntry
    {

        static void Main(string[] args)
        {
            string test3 = skywave.partnum.Assembled.ToString(); //assembled

            string zxcv = skywave.partnumAssembled; //doesnt compile
            skywave obj = new skywave();               
            string asdf = obj.partnumAssembled;       //1234B

            Console.WriteLine(test3);
            Console.WriteLine(asdf);
            Console.ReadKey(true);
        }
    }
}

我很困惑为什么 test3 不需要在本地创建 enum 对象。

我认为它非常干净,这让我想知道是否有办法做类似的事情,但 enum 的输出是字母数字。

理想情况下,我希望我的库能够执行以下操作,但无需先创建对象的麻烦。

string zxcv = skywave.partnum.assembled; //1234B

枚举是 C# 中的类型。在您的代码中,skywave 是一个 class,它包含一个名为 partwave 的枚举。如果你想在不引用skywave的情况下引用partwave,你需要在class之外定义它:

public enum partnum : byte { assembled, configured };
public class skywave
{
    public readonly string partnum_assembled = "1234B";
}

如果你想在不实例化skywave的情况下能够引用partnum_assembled,你需要将其定义为staticconst

public class skywave
{
    public static readonly string partnum_assembled = "1234B";
}

public class skywave
{
    public const string partnum_assembled = "1234B";
}

无法通过包含对象的 实例 访问嵌套类型(在本例中为枚举,尽管它适用于任何其他种类的嵌套类型),但是而不是通过包含对象本身。

skywave 的一个特定实例不包含 partnum 类型。整个 skywave class 包含类型,因此您通过该类型访问 enum

没有从 enumstring 的隐式转换,您也没有任何方法可以创建一个。您需要创建自己的自定义类型,模拟 Enum 模式,才能隐式转换为 string.