为什么在此示例中枚举不需要创建对象?
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
,你需要将其定义为static
或const
public class skywave
{
public static readonly string partnum_assembled = "1234B";
}
或
public class skywave
{
public const string partnum_assembled = "1234B";
}
无法通过包含对象的 实例 访问嵌套类型(在本例中为枚举,尽管它适用于任何其他种类的嵌套类型),但是而不是通过包含对象本身。
skywave
的一个特定实例不包含 partnum
类型。整个 skywave
class 包含类型,因此您通过该类型访问 enum
。
没有从 enum
到 string
的隐式转换,您也没有任何方法可以创建一个。您需要创建自己的自定义类型,模拟 Enum 模式,才能隐式转换为 string
.
我有一个图书馆。
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
,你需要将其定义为static
或const
public class skywave
{
public static readonly string partnum_assembled = "1234B";
}
或
public class skywave
{
public const string partnum_assembled = "1234B";
}
无法通过包含对象的 实例 访问嵌套类型(在本例中为枚举,尽管它适用于任何其他种类的嵌套类型),但是而不是通过包含对象本身。
skywave
的一个特定实例不包含 partnum
类型。整个 skywave
class 包含类型,因此您通过该类型访问 enum
。
没有从 enum
到 string
的隐式转换,您也没有任何方法可以创建一个。您需要创建自己的自定义类型,模拟 Enum 模式,才能隐式转换为 string
.