本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
第五章 类
前一章讨论了数据类型和它们的用法.现在我们转移到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( ); } 调用析构函数中的释放方法并不是必要的——总之,垃圾收集会留意释放对象.但没有忘记清除是一种良好的习惯.
本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
|