源码
资讯
  当前位置:源码网网络学院网络编程.NET教程 → C#学习第十一天
特别推荐
热点TOP10
C#学习第十一天
日期:2007年4月20日 作者: 人气: 查看:[大字体 中字体 小字体]

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: // Heronian formula
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#类的另外一个功能是索引,它使象数组语法一样访问类中值成为可能。还有,如果当类中的某些事情发生时,你想客户得到通知,要让它们与事件关联。

当垃圾收集器调用析构函数时,对象的生命就结束了。由于你不能准确地预测这种情况什么时候会发生,所以应该创建一个方法以释放这些宝贵的资源,当你停止使用它们时。

(出处:源码网)

百度搜索 Google搜索
相关文章:
·C#将指定网页添加到收藏夹的方法
·一个用c#写的扫描asp源码漏洞的应用程序(续)
·关于两代语言.C/C++,java/c#
·C#语言初级入门(1)
·C#语言初级入门(2)
·C#语言初级入门(3)
·C#语言初级入门(4)
·分部方法:应该纳入到C#中吗?
·C#冒泡算法!
·用C#开发智能手机软件:推箱子(一)
相关软件:
·C#版聊天室
·春天网络域名主机系统(C#全源码)
·自由投票调查系统(C#) v1.0
·C#语言参考(DOC)
·CK留言本(C#版)
·一个C#写的翻转棋游戏
·ASP.NET(C#)新手留言本