-
c#教程枚举
1.类型
值类型
变量直接包含它们自己的数据
局部变量总是放在栈(stack)中
引用类型
变量间接指向它们的数据
局部变量指向堆(heap)中的对象
枚举(enum) 值类型
结构(struct) 值类型
类(class) 引用类型
接口(interface) 引用类型
数组([ ]array ) 引用类型
委托(delegate) 引用类型
你可能对上面的例子感到奇怪,c#中的内在类如int,double怎么没有。C#规定这些内在类属于结构,C#称之为简单类型。简单类型和用户自定义类型之间的最大区别是前者有字面表达式(如42),而后者没有。
当然,还有第三种类型:指针。但指针只用在由unsafe关键字标识的非安全的代码中。
2.枚举类型
它是一个用户声明的值类型
enum Suit
{
Clubs, Diamonds, Hearts, Spades
}
//Suit表示一副牌,它有4个花色:梅花(Clubs),方块(Diamonds),红心(Hearts),//黑桃(Spades)
sealed class Example
{
static void Main()
{
...
Suit lead = Spades; //错误
...
Suit trumps = Suit.Clubs; //正确
...
}
}
枚举的声明可以出现在类声明的相同地方。
枚举的声明包括名字、访问权限、内在的类型和枚举的成员。
枚举中声明的常量的范围是定义它们的枚举,换言之,下面的例子是错误的:
Suit trumps = Clubs;
Clubs必须被限制为Suit的一个成员,就如下面:
Suit trumps = Suit.Clubs;
3.枚举的注意点
枚举值缺省为int
你可以选择任一内在的整数类型
c#教程但不能是字符型
enum Suit : int //内在类型是int,可以省略
{
Clubs,
Diamonds,
Hearts = 42, //成员的取值缺省为前一个成员取值+1,但可以自己赋初值
Spades, //最后一个分号是可选的
};//可以有结尾分号
枚举类可以显式的声明它的内在类型是sbyte, byte, short, ushort, int, uint, long, ulong。如果一个枚举类没有显式声明它的内在类型,则缺省为int。
成员的取值必须和枚举声明的内在类型相同,并且必须在内在类型的范围之内(例如,你不能让成员的取值为负数,而枚举的内在类型是uint)。
如果成员没有被赋值, 那么它的取值是前一个成员取值+1,第一个成员的缺省值是1。枚举的成员的取值可以有相同的取值。
最后一个枚举成员可以使用一个结尾分号,这使得你将来可以很方便地加入更多的成员。
枚举成员的访问权限隐含为public。
4.使用枚举
枚举隐式派生于System.Enum
namespace System
{
public abstract class Enum ...
{
// 静态函数
public static string[] GetNames(Type);
...
// 实例函数
public override string ToString();
// 构造函数
protected Enum();
}
}
Suit trumps = Suit.Clubs;
string[] names = System.Enum.GetNames(trumps.GetType());
...
Console.Write(names[0]); // Clubs
Console.Write(trumps); // Clubs
Console.Write("{0}", trumps); // Clubs
Console.Write(trumps.ToString()); // Clubs
Console.Write((Suit)24); // 24
System.Enum是System命名空间的一个抽象类。它实现了一系列的接口:
public abstract class Enum
: IComparable, IFormattable, IConvertible
{
...
}
枚举(例如Suit)隐式派生于System.Enum。
System.Enum是一个特殊的类,它只能被用作一个枚举类型的隐含基类。
你不能自己从System.Enum显式派生自己的类。
你不能创造一个System.Enum的实例。(它的构造函数是protected,并且它是一个抽象类)。
5.枚举的操作符
枚举变量当作整型变量看待,但在大部分情况下不能使用移位操作符。
6.枚举的转换
c#教程隐式转换
0 可以转为任一 enum类型
从不抛出错误
显式转换
从enum 到enum 通过内在类型转换
从enum 转为数值类型(包括char)
从数值类型(包括char) 转为 enum
c#教程 从不抛出错误
0可以被转为任一enum类型,不管enum类型包不包括0。
如果你使用Console.WriteLine显视一个枚举值,它好像被隐式转换为一个字符串。但这是一种错觉,下面的例子说明了这一点:
enum Suit { Clubs, Diamonds, Hearts, Spades }
Suit trumps = Suit.Clubs;
Console.WriteLine(trumps);//显视为Clubs
string s = trumps;//错误,trumps不是字符串
Console.WriteLine完成的从enum到string 的类型转换是通过System.Enum的IFormattable接口实现的。
值类型
变量直接包含它们自己的数据
局部变量总是放在栈(stack)中
引用类型
变量间接指向它们的数据
局部变量指向堆(heap)中的对象
枚举(enum) 值类型
结构(struct) 值类型
类(class) 引用类型
接口(interface) 引用类型
数组([ ]array ) 引用类型
委托(delegate) 引用类型
你可能对上面的例子感到奇怪,c#中的内在类如int,double怎么没有。C#规定这些内在类属于结构,C#称之为简单类型。简单类型和用户自定义类型之间的最大区别是前者有字面表达式(如42),而后者没有。
当然,还有第三种类型:指针。但指针只用在由unsafe关键字标识的非安全的代码中。
2.枚举类型
它是一个用户声明的值类型
enum Suit
{
Clubs, Diamonds, Hearts, Spades
}
//Suit表示一副牌,它有4个花色:梅花(Clubs),方块(Diamonds),红心(Hearts),//黑桃(Spades)
sealed class Example
{
static void Main()
{
...
Suit lead = Spades; //错误
...
Suit trumps = Suit.Clubs; //正确
...
}
}
枚举的声明可以出现在类声明的相同地方。
枚举的声明包括名字、访问权限、内在的类型和枚举的成员。
枚举中声明的常量的范围是定义它们的枚举,换言之,下面的例子是错误的:
Suit trumps = Clubs;
Clubs必须被限制为Suit的一个成员,就如下面:
Suit trumps = Suit.Clubs;
3.枚举的注意点
枚举值缺省为int
你可以选择任一内在的整数类型
c#教程但不能是字符型
enum Suit : int //内在类型是int,可以省略
{
Clubs,
Diamonds,
Hearts = 42, //成员的取值缺省为前一个成员取值+1,但可以自己赋初值
Spades, //最后一个分号是可选的
};//可以有结尾分号
枚举类可以显式的声明它的内在类型是sbyte, byte, short, ushort, int, uint, long, ulong。如果一个枚举类没有显式声明它的内在类型,则缺省为int。
成员的取值必须和枚举声明的内在类型相同,并且必须在内在类型的范围之内(例如,你不能让成员的取值为负数,而枚举的内在类型是uint)。
如果成员没有被赋值, 那么它的取值是前一个成员取值+1,第一个成员的缺省值是1。枚举的成员的取值可以有相同的取值。
最后一个枚举成员可以使用一个结尾分号,这使得你将来可以很方便地加入更多的成员。
枚举成员的访问权限隐含为public。
4.使用枚举
枚举隐式派生于System.Enum
namespace System
{
public abstract class Enum ...
{
// 静态函数
public static string[] GetNames(Type);
...
// 实例函数
public override string ToString();
// 构造函数
protected Enum();
}
}
Suit trumps = Suit.Clubs;
string[] names = System.Enum.GetNames(trumps.GetType());
...
Console.Write(names[0]); // Clubs
Console.Write(trumps); // Clubs
Console.Write("{0}", trumps); // Clubs
Console.Write(trumps.ToString()); // Clubs
Console.Write((Suit)24); // 24
System.Enum是System命名空间的一个抽象类。它实现了一系列的接口:
public abstract class Enum
: IComparable, IFormattable, IConvertible
{
...
}
枚举(例如Suit)隐式派生于System.Enum。
System.Enum是一个特殊的类,它只能被用作一个枚举类型的隐含基类。
你不能自己从System.Enum显式派生自己的类。
你不能创造一个System.Enum的实例。(它的构造函数是protected,并且它是一个抽象类)。
5.枚举的操作符
枚举变量当作整型变量看待,但在大部分情况下不能使用移位操作符。
6.枚举的转换
c#教程隐式转换
0 可以转为任一 enum类型
从不抛出错误
显式转换
从enum 到enum 通过内在类型转换
从enum 转为数值类型(包括char)
从数值类型(包括char) 转为 enum
c#教程 从不抛出错误
0可以被转为任一enum类型,不管enum类型包不包括0。
如果你使用Console.WriteLine显视一个枚举值,它好像被隐式转换为一个字符串。但这是一种错觉,下面的例子说明了这一点:
enum Suit { Clubs, Diamonds, Hearts, Spades }
Suit trumps = Suit.Clubs;
Console.WriteLine(trumps);//显视为Clubs
string s = trumps;//错误,trumps不是字符串
Console.WriteLine完成的从enum到string 的类型转换是通过System.Enum的IFormattable接口实现的。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式