技术开发 频道

《.net编程先锋C#》第五章 类


【IT168技术文档】

  第五章 类
  前一章讨论了数据类型和它们的用法。现在我们转移到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(); }
0
相关文章