首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 正文

展现C#世界之四:C#类型

  4.1.1.5 小数型(The decimal Type)

  小数型是一种高精度、128位数据类型,它打算用于金融和货币的计算。它所表示的范围从大约1.0x10^-28 到 7.9x10^28,具有28至29位有效数字。要注意,精度是以位数 (digits)而不是以小数位(decimal places)表示。运算准确到28个小数位的最大值。

  正如你所看到的,它的取值范围比double的还窄,但它更精确。因此,没有decimal和double之间的隐式转换——往一个方向转换可能会溢出,往另外一个方向可能会丢失精度。你不得不运用显式转换。

  当定义一个变量并赋值给它时,使用 m 后缀以表明它是一个小数型:

  decimal decMyValue = 1.0m;

  如果省略了m,在变量被赋值之前,它将被编译器认作double型。

  4.1.2 结构类型

  一个结构类型可以声明构造函数、常数、字段、方法、属性、索引、操作符和嵌套类型。尽管列出来的功能看起来象一个成熟的类,但在C#中,结构和类的区别在于结构是一个值类型,而类是一个引用类型。与C++相比,这里可以用结构关键字定义一个类。

  使用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等。你可以节省内存,因为没有如类对象所需的那样有额外的引用产生。例如,当声明含有成千上万个对象的数组时,这会引起极大的差异。

  清单4.1 包含一个命名为IP的简单结构,它表示一个使用byte类型的4个字段的IP地址。我不包括方法等,因为这些工作正如使用类一样,将在下一章有详细的描述。

  清单4.1 定义一个简单的结构

  1: using System;

  2:

  3: struct IP

  4: {

  5: public byte b1,b2,b3,b4;

  6: }

  7:

  8: class Test

  9: {

  10: public static void Main()

  11: {

  12: IP myIP;

  13: myIP.b1 = 192;

  14: myIP.b2 = 168;

  15: myIP.b3 = 1;

  16: myIP.b4 = 101;

  17: Console.Write("{0}.{1}.",myIP.b1,myIP.b2);

  18: Console.Write("{0}.{1}",myIP.b3,myIP.b4);

  19: }

  20: }

  4.1.3 枚举类型

  当你想声明一个由一指定常量集合组成的独特类型时,枚举类型正是你要寻觅的。最简单的形式,它看起来可能象这样:

  enum MonthNames { January, February, March, April };

  因我惯用缺省设置,故枚举元素是int型,且第一个元素为0值。每一个连续的元素按1递增。如果你想给第一个元素直接赋值,可以如下把它设成1:

  enum MonthNames { January=1, February, March, April };

  如果你想赋任意值给每个元素——甚至相同的值——这也没有问题:

  enum MonthNames { January=31, February=28, March=31, April=30 };

  最后的选择是不同于int的数据类型。可以在一条语句中按如此赋值:

  enum MonthNames : byte { January=31, February=28, March=31, April=30 };

  你可以使用的类型仅限于long、int、short和byte.

  4.2 引用类型

  和值类型相比,引用类型不存储它们所代表的实际数据,但它们存储实际数据的引用。在C#中提供以下引用类型给你使用:

  。对象类型

  。类类 型

  。接口

  。代表元

  。字符串类型

  。数组

  4.2.1 对象类型

  对象类型是所有类型之母——它是其它类型最根本的基类。因为它是所有对象的基类,所以可把任何类型的值赋给它。例如,一个整型:

  object theObj = 123;

  给所有的C++程序员一个警告:object并不等价于你可能正在寻找的void*.无论如何,忘掉指针总是个好主意。

  当一个值类型被加框(作为一个对象利用)时,对象类型就被使用了。这一章稍后会讨论到加框和消框

  4.2.2 类类型

  一个类类型可以包含数据成员、函数成员和嵌套类型。数据成员是常量、字段和事件。函数成员包括方法、属性、索引、操作符、构造函数和析构函数。类和结构的功能是非常相似的,但正如前面所述,结构是值类型而类是引用类型。

  和C++相比,仅允许单继承。(你不能拥有派生一个新对象的多重基类。) 但是,C#中的一个类可以派生自多重接口,该接口在下一节将得到描述。

  第五章 "类"专门讨论使用类编程。这一节仅打算给出C#类在哪里适合类型图的一个全貌。

  4.2.3 接口

  一个接口声明一个只有抽象成员的引用类型。跟C++中相似的概念为:一个结构的成员,且方法等于0.如果你不知道那些概念的任何东西,这里就是在C#中一个接口实际所做的。仅仅只存在着方法标志,但根本就没有执行代码。这就暗示了不能实例化一个接口,只能实例化一个派生自该接口的对象。

  可以在一个接口中定义方法、属性和索引。所以,对比一个类,接口有什么特殊性呢?当定义一个类时,可以派生自多重接口,而你只能可以从仅有的一个类派生。

  你可能会问:"OK,但我必须实现所有的接口成员,那么我能从这个途径得到什么呢?" 我想举一个来自。NET的例子:

  很多类实现了IDictionary 接口。你可以使用简单的类型转换访问接口:

  IDictionary myDict = (IDictionary)someobjectthatsupportsit;

  现在你的代码可以访问字典了。可等等,我说很多类可以实现这个接口——所以,你可以在多个地方重用代码来访问IDictionary 接口!一旦学会,任何地方都可使用。

  当你决定在类设计中使用接口时,学习更多关于面向对象的设计是个好主意。这本书不能教你这些概念,但你可以学习如何创建接口。以下的代码段定义接口IFace,它只有一个方法:

  interface IFace

  {

  void ShowMyFace();

  }

上一页  [1] [2] [3] 下一页

【责编:John】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 社区讨论
 博客论点
 Dotnet频道相关导航