首页 | 互联网 | IT动态 | 网络设备 | 服务器 | IDC | 安全 | Cisco | Windows | Linux | Java | .Net | Oracle | CIW | 华为 | 专题
IT技术 | 网页设计 | 平面设计 | 电子书下载 | 教学视频 | 方案 | 数字网校 | 直播室 | 虚拟考场 | 面授培训 | 搜索 | 博客 | 沙龙 | 论坛
中国IT实验室Dotnet频道
中国IT教育
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 文章正文

展现C#世界之五:类的介绍

文章来源中国IT实验室收集整理 作者佚名 更新时间2007-11-29 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

  前一章讨论了数据类型和它们的用法。现在我们转移到C#中至关重要的结构——类。没有了类,就连简单的C#程序都不能编译。这一章假定你知道了一个类的基本组成部分:方法、属性、构造函数和析构函数。 C#在其中增加了索引和事件。

  在这一章中,你学到下列有关类的话题。

  。 使用构造函数和析构函数

  。给类写方法

  。给一个类增加属性存取标志

  。实现索引

  。创建事件并通过代表元为事件关联客户

  。应用类、成员和存取修饰符。

  5.1 构造函数和析构函数

  在你可以访问一个类的方法、属性或任何其它东西之前, 第一条执行的语句是包含有相应类的构造函数。甚至你自己不写一个构造函数,也会有一个缺省的构造函数提供给你。

  class TestClass

  {

  public TestClass(): base() {} // 由编译器提供

  }

  一个构造函数总是和它的类名相同,但是,它没有声明返回类型。总之,构造函数总是public的,你可以用它们来初始化变量。

  public TestClass()

  {

  // 在这给变量

  // 初始化代码等等。

  }

  如果类仅包含静态成员(能以类型调用,而不是以实例调用的成员),你可以创建一个private的构造函数。

  private TestClass() {}

  尽管存取修饰符在这一章的后面将要大篇幅地讨论,但是private意味着从类的外面不可能访问该构造函数。所以,它不能被调用,且没有对象可以自该类定义被实例化。并不仅限于无参数构造函数——你可以传递初始参数来初始化成员。

  public TestClass(string strName, int nAge) { …… }

  作为一个C/C++程序员,你可能习惯于给初始化写一个附加的方法,因为在构造函数中没有返回值。当然,尽管在C#中也没有返回值,但你可以引发一个自制的异常,以从构造函数获得返回值。更多有关异常处理的知识在第七章 "异常处理"中有讨论。

  但是,当你保留引用给宝贵的资源,应该想到写一个方法来解决:一个可以被显式地调用来释放这些资源。问题是当你可以在析构函数(以类名的前面加"~"的方式命名)中做同样的事情时,为何还要写一个附加的方法。

  public ~TestClass()

  {

  // 清除

  }

  你应该写一个附加方法的原因是垃圾收集器,它在变量超出范围后并不会立即被调用,而仅当间歇期间或内存条件满足时才被触发。当你锁住资源的时间长于你所计划的时间时,它就会发生。因此,提供一个显式的释放方式是一个好主意,它同样能从析构函数中调用。

  public void Release()

  {

  // 释放所有宝贵的资源

  }

  public ~TestClass()

  {

  Release();

  }

  调用析构函数中的释放方法并不是必要的——总之,垃圾收集会留意释放对象。但没有忘记清除是一种良好的习惯。

  5.2 方法

  既然对象能正确地初始化和结束,所剩下来的就是往类中增加功能。在大多数情况下,功能的主要部分在方法中能得到实现。你早已见过静态方法的使用,但是,这些是类型(类)的部分,不是实例(对象)。为了让你迅速入门,我把这些方法的烦琐问题安排为三节:

  。方法参数

  。改写方法

  。方法屏蔽

  5.2.1 方法参数

  因方法要处理更改数值,你多多少少要传递值给方法,并从方法获得返回值。以下三个部分涉及到由传递值和为调用者获取返回结果所引起的问题。

  。输入参数

  。引用参数

  。输出参数

  5.2.1.1 输入参数

  你早已在例子中见过的一个参数就是输入参数。你用一个输入参数通过值传递一个变量给一个方法——方法的变量被调用者传递进来的值的一个拷贝初始化。清单5.1 示范输入参数的使用。

  清单 5.1 通过值传递参数

  1: using System;

  2:

  3: public class SquareSample

  4: {

  5: public int CalcSquare(int nSideLength)

  6: {

  7: return nSideLength*nSideLength;

  8: }

  9: }

  10:

  11: class SquareApp

  12: {

  13: public static void Main()

  14: {

  15: SquareSample sq = new SquareSample();

  16: Console.WriteLine(sq.CalcSquare(25)。ToString());

  17: }

  18: }

  因为我传递值而不是引用给一个变量,所以当调用方法时(见第16行),可以使用一个常量表达式(25)。整型结果被传回给调用者作为返回值,它没有存到中间变量就被立即显示到屏幕上 .

[1] [2] [3] [4] [5] [6] [7] 下一页  

【责编:John】

中国IT教育

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