本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
5.5.3 存取修饰符 存取修饰符定义了某些代码对类成员(如方法和属性)的存取等级.你必须给每个成员加上所希望的存取修饰符,否则,默认的存取类型是隐含的. 你可以应用4个 存取修饰符之一: public——任何地方都可以访问该成员,这是具有最少限制的存取修饰符. protected——在类及所有的派生类中可以访问该成员,不允许外部访问. private——仅仅在同一个类的内部才能访问该成员.甚至派生类都不能访问它. internal——允许相同组件(应用程序或库)的所有代码访问.在.NET组件级别,你可以把它视为public,而在外部则为private. 为了演示存取修饰符的用法,我稍微修改了Triangle例子,使它包含了新增的域成员和一个新的派生类(见清单 5.13). 清单 5.13 在类中使用存取修饰符 1: using System; 2: 3: internal class Triangle 4: { 5: protected int m_a, m_b, m_c; 6: public Triangle( int a, int b, int c ) 7: { 8: m_a = a; 9: m_b = b; 10: m_c = c; 11: } 12: 13: public virtual double Area( ) 14: { 15: 16: double s = ( m_a + m_b + m_c ) / 2.0; 17: double dArea = Math.Sqrt( s*( s-m_a )*( s-m_b )*( s-m_c ) ); 18: return dArea; 19: } 20: } 21: 22: internal class Prism:Triangle 23: { 24: private int m_h; 25: public Prism( int a, int b, int c, int h ):base( a,b,c ) 26: { 27: m_h = h; 28: } 29: 30: public override double Area( ) 31: { 32: double dArea = base.Area( ) * 2.0; 33: dArea += m_a*m_h + m_b*m_h + m_c*m_h; 34: return dArea; 35: } 36: } 37: 38: class PrismApp 39: { 40: public static void Main( ) 41: { 42: Prism prism = new Prism( 2,5,6,1 ); 43: Console.WriteLine( prism.Area( ) ); 44: } 45: }
Triangle 类和 Prism 类现在被标为 internal.这意味着它们只能在当前组件中被访问. 请记? ?NET组件”这个术语指的是包装( packaging,),而不是你可能在COM+中用到的组件. Triangle 类有三个 protected成员,它们在构造函数中被初始化,并用于面积计算的方法中.由于这些成员是 protected 成员,所以我可以在派生类Prism中访问它们,在那里执行不同的面积计算. Prism自己新增了一个成员m_h,它是私有的——甚至派生类也不能访问它. 花些时间为每个类成员甚至每个类计划一种?げ愦?通常是个好主意.当需要引入修改时,全面的计划最终会帮助你,因为没有程序员会愿意使用“没有文档”的类功能. 5.6 小结 这章显示了类的各种要素,它是运行实例(对象)的模板.在一个对象的生命期,首先被执行的代码是个构造函数.构造函数用来初始化变量,这些变量后来在方法中用于计算结果. 方法允许你传递值、引用给变量,或者只传送一个输出值.方法可以被改写以实现新的功能,或者你可以屏蔽基类成员,如果它实现了一个具有和派生类成员相同名字的方法. 命名属性可以被当作域成员(成员变量)或属性存取标志实现.后者是get和set存取标志,忽略一个或另外一个,你可以创建仅写或仅读属性.存取标志非常适合于确认赋给属性的值.
C#类的另外一个功能是索引,它使象数组语法一样访问类中值成为可能.还有,如果当类中的某些事情发生时,你想客户得到通知,要让它们与事件关联. 当垃圾收集器调用析构函数时,对象的生命就结束了.由于你不能准确地预测这种情况什么时候会发生,所以应该创建一个方法以释放这些宝贵的资源,当你停止使用它们时.
本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
|