欢迎来到天天文库
浏览记录
ID:30921099
大小:79.66 KB
页数:8页
时间:2019-01-04
《第3章面向对象技术(3)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第四讲域和属性为了保存类的实例的各种数据信息,C#给我们提供了两种方法:域和属性。其屮属性实现了良好的数据封装和数据隐藏。4.1域4.1.1声明域农示与对象或类相关联的变量。声明格式如卜:域修饰符类型变量名(域名可以使多个);域的修饰符可以是:•new•public•protected•internal•private•static•readonly实际上,域相当于C++屮的类的简单成员变量。在下而的代码中类A包含了三个域,公有的x和y以及私有的zoclassA{publicintx;publicstringy;privatefloatz;}3.1.2静态域和非静态域静态域的声明是使用sta
2、tic修饰符,其它的域都是非静态域。静态域和非静态域分别属于C#屮静态变量和非静态变量。若将一个域说明为静态的,无论建立多少个该类的实例,内存中只存在一个静态数据的拷贝。当这个类的第一个实例建立时,域被初始化。以后再进行类的实例化时不再对其进行初始化,所有属于这个类的实例共享一个副本。与之相反,非静态域在类的每次实例化时,每个实例都拥有一份单独的拷贝,下而的例子清楚地反映了二者Z间的区别。usingSystem;publicclassCount{staticintcount;intnumber;publicCount(){count=count+1;number=count;)publicv
3、oidshow()Console.WriteLine(Hobject{0}:count={1number,count);)}classTest{publicstaticvoidMain()(Counta=newCount();a.show();1,IConsole.WriteLine();Countb=newCount();a.show();1,2b.show();2,2Console.WriteLineO;Countc=newCount();a.show();l,3b.show();2,3c・show();3,3}}程序的运行结呆应为object1:count=lobject1:count
4、=2object2:count=2objectl:count=3object2:count=3object3:count=34.1.3只读域对于只读域我们只能域是只读的。域的声明中如果加上了readonly修饰符,表明该域为只读域c在域的定义中和它所属类的构造函数中进行修改。在其它情况下,publicclassA{publicstaticreadonlydoublePI=3.14159;publicstaticreadonlyColorWhite=newColor(255,255,255);publicstaticreadonlyintkByte=1024;}usingSystem;name
5、spaceProgramipublicclassApublicstaticreadonlyintX=1;)}namespaceProgram2{classTest(staticvoidMain(){Console.WriteLine(ProgramI.A.X);}}}4.1.4域的初始化对于静态变量,非静态的对彖变屋利数组元素。这些变量口动初始化为本身的默认值。对于所有引用类型的变量默认值为nullo所有值类型的变量的默认值见下表所示:变蚤类型默认值sbyte,byte,sliait.xulioit.iiit,xiiiit,long,ulong0chaiHJ000floatO.Ofdoubl
6、eO.Oddeciiiul0.0mboolfabeeium0对于struct类型的变量,默认的初始化将对构成该结构的每一个值类型初始化为上表中的默认值,对构成其的每一个引用类型初始化为nulL如果在类中,没有显式地对域进行初始化,系统将赋予其一个默认值。域的默认初始化分为两种情况:对于静态域,类在装载时对其进行初始化。对于非静态域,在类的实例创建时进行初始化。在默认的初始化之前,域的值是不可预测的。classTest{staticinta=b+1;staticinta;a=b+l;staticintb;b=a+1;staticintb=a+1;}实际上等价于a=l,b=2而下面的代码则是非法
7、的classAintx=1;inty=x4-1;main()Intxl;Intyl;Intz=x1+y1;}}因为非静态变量X在类A实例化以前并没有初始化,代码y=x+1无法得到止确的x的值。4.2属性C#屮的属性更充分地体现了对象的封装性,不直接操作类的数据内容。而是通过访问器进行访问,它借助于get和set对属性的值进行读写。4.2.1声明属性声明:限定符属性名{属性的访问声明}属性的修饰符有newpub
此文档下载收益归作者所有