欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 »  .NET本质论第一卷:公共语言运行库教程 » 正文

本教程章节列表

.net本质论-System.ValueType类型与System.Enum类型

创建时间:2012年11月15日 20:50  阅读次数:(9580)
分享到:
定义新的值类型有两种方式:一种方式是定义以System.ValueType为基类型的类型:另一种方式是定义以System.Enum为基类型的类型。C#的struct定义与class定义极为相似,只是关键字不同而已。但还是有一些差别:你不能给c#的struct指定显式的基类型,即隐含的基类型总是System.ValueType。你也不能显式地将c#的struct声明为abstract或者sealed,更确切地说,编译器将隐式地添加sealed修饰符。考虑下面简单的C# struct定义:
Public struce Size
{
Public int height;
Public int width;
Public void Scale(double factor){
Height *= factor;
Width *=factor;
}
Public int Area{get{return height*width;}}
}

注意,像C# class的定义一样,C# struct可以有方法和宇段,struct还能支持任何接口。说到底,C# struct的定义等价于定义了一个派生于System.ValueType的新的C# class:例如,前面的struct等价于下面的类定义:
Public sealed class Size:System.ValueType{
Public int height;
Public int width;
Public void Scale(double factor){
Height*=factor;
Width*=factor;
}
Public int Area{ get { return height * width; } }
}

然而,c#编译器不允许ValueType用作基类型。更确切地说,你必须使用struct构件才能实现这个目的。




对于充当用户自定义的基本数据类型,却又包含任意合成字段的类型定义.c#的struct是很有用的。此外,你还可以定义特殊的整型,它不能添加任何新的字段,而是限制特定整型的值空间。这些受限制的整型被称为枚举类型(enumeration type)。

枚举类型是直接基类型为System.Enum而不是System.ValueType的CLR值类型。枚举类型必须指定一个辅助类型用于枚举能数据表示。这个辅助类型必须是CLR内置整型之一(不包括System.Char)。枚举类型可以包含成员;然而,被支持的成员只是字面字段。枚举类型的字面字段必须匹配枚举的基础表示类型,并且充当能被用于枚举实例的合法值的集合。

你可以使用c#的enum定义创建枚举类型。C#的enum与C或C++的enum很相似。c#的enum定义包含一个用逗号分隔的惟一名字的列表:
Public enum Breath
{
None,Sweet,Garlicky,Oniony,
Rencid,Horrid,Sewerlike
}

编译器为每个名字赋予一个数值。如果没有提供显式值(在这个示例中就是如此),那么,编译器将按声明顺序予0、1、2等等。在概念上,这个enum等价于下面的c#类定义:
public sealed class Breatn:System.Enum {
 public const int None=0;
 public const int Sweet=1;
 public const int Garlicky=2;
 public const int Oniony=3;
 public const int Rancid=4;
 public const int Horrid=5;
 public const int Sewerlike=6;
}

然而,如同valueType一样,C#编译器禁止显式地将System.Enum作为基类型,只能够采用enum构件。此外,不同于C,c#并不认为数值类型与枚举类型是兼容的,如果要像处理int一样处理enum(反之亦然),则必须首先显式地将其强制转换为想要的类型。相反,c++允许从枚举类型到数值类型的隐式转换。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 96+76=? 的结果(结果是:172)
结  果: