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

时间:2017-01-26 14:24:28

标签: c# dll visual-studio-2015 enums instantiation

我有一个图书馆。

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

3 个答案:

答案 0 :(得分:1)

枚举是C#中的类型。在您的代码中,skywave是一个包含名为partwave的枚举的类。如果您希望能够在不参考partwave的情况下引用skywave,则需要在课堂外定义它:

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

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

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

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

答案 1 :(得分:1)

嵌套类型(在这种情况下是枚举,虽然它适用于任何其他种类的嵌套类型)不能通过包含对象的实例访问,而是通过包含对象本身。

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

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

答案 2 :(得分:0)

https://stackoverflow.com/a/29251412/7474080

在前面的例子中找到了答案,但没有找到它的词汇。