C#教程—最佳的入门教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C#语言第一部分面向对象(一)类和Main方法usingSystem;namespaceEdu.Study.OO.MainMethod{classProgram{staticvoidMain(string[]args){Console.WriteLine(HelloWorld);}}}C#语言第一部分面向对象(二)类类是面向对象的基础,类表现出的最基本特性是其“封装性”。类是某一些具有相同属性和行为对象的抽象。例如:波斯猫、野猫、家猫、花猫都具有相同的属性和行为,所以被抽象成为猫类。类具有属性和方法,表示这个类所代表的对象具有的特性和行为。从类实例化对象后,对象就可以给类中定义的属性“赋值”或运行类中定义的方法,属性和方法和每个对象相关,即相同类的不同的对象具有相同的属性,但属性的属性值可以不同;具有相同的方法,但方法运行的结果可以不同。类需要将和其相关的属性和方法“封装”起来,并和对象进行绑定。看下面的例子,自行理解:usingSystem;namespaceEdi.Study.OO.Class{publicclassPerson{privatestringname;privateintage;privateboolsex;/*属性定义,在面向对象编程里,字段作为保存属性值的变量,而属性则需要使用特殊的行来表现。一般来说一对get/set行为用来展现对象的属性,其中get用于²获取该对象的属性;set用于设置该对象的属性get/set称为属性的访问器*///姓名属性publicstringName{get{//get访问器必须返回一个值,作为该属性的“属性值returnthis.name;//.运算符的作用是访问某个对象的属性或方法//this关键字表示“当前实例”,即哪一个对象正在操作属性访问器,this就表示哪个对象//所以一般说法,this表示“当前对象”,使用this.访问的是“声明在本类中”的属性和方法}set{//set访问器具有一个局部变量value,该值是从外部设置给该属性的值this.name=value;}//属性的基本要求:get访问器必须返回一个值,该值类型和属性类型相同;set访问器可以设置一个值,这个值保存在什么地方倒无所谓}//年龄属性publicintAge{get{returnage;}set{age=value;}}//性别属性publicboolSex{get{returnsex;}set{sex=value;}}//显示个人信的方法publicvoidShowMe(){//使用this.Name,此时属性Name的get访问器会运行,返回Name属性的属性值,其它属性同理Console.WriteLine(姓名:{0},性别:{1},年龄:{2}岁。,this.Name,this.Sex,this.Age);}/*字段、属性和方法前面,都可以使用public,protected,private和internal这四种访问修饰符来修饰;public表示字段、属性或方法为“公开”,公开的成员不仅可以被类中的其它成员访问到,也可以通过这个类的对象访问到;private表示字段、属性或方法为“私有”,私有的成员只能被类中的其它成员访问到,无法通过类的对象访问到;protected和internal稍候介绍;*/}classProgram{staticvoidMain(string[]args){//通过new运算符可以实例化一个对象//实例化Person类的对象,保存在person变量中Personp1=newPerson();Personp2=newPerson();//设置person对象的各个属性,使用person.Name=王宝宝,Name属性的set访问器会被运行,等号右边的值王宝宝传递给set访问器的value变量p1.Name=王宝宝;p1.Age=21;p1.Sex=false;p2.Name=李大大;p2.Age=18;p2.Sex=true;//使用”.”操作符访问person对象的ShowMe方法,显示结果p1.ShowMe();p2.ShowMe();}}}C#语言第一部分面向对象(三)对象的构造上一章我们介绍了一个Person类,它可以正常工作,但从逻辑上存在很多问题。首先我们注意到,Person类对象实例化完毕后,我们才去确定其属性,如Name,Sex,Age属性。但客观情况下,这些属性应该是同对象生成一起赋值的。一句话,当对象被实例化的同时,对象的属性就应当有初始值,反映到代码中,就是“用来保存属性值的字段应该有初始值”构造器,也成为构造方法,构造函数,就是专门用来做这件事情的。一个类可以有0或多个构造器,在有多个构造器的情况里,各个构造器的参数必须不同。在C#类中,有这样一类特殊的方法,没有返回值类型,方法名必须和类名相同,可以有参数列表。这类方法就叫做构造器,构造器通过new操作符指定,在实例化对象的同时运行。我们用构造器来改造上一章讲到的Person类。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceEdu.Study.OO.Constructor{//人类,这次我们修改一下Person类//在Person类生成对象的同时,Name属性,Sex属性和Age属性的值就应该确定,而不应该在生成对象后再进行设置,这是不符合客观规律的。//在对象实例化的同时对属性进行设置,就要用到构造器publicclassPerson{privatestringname;privateintage;privateboolsex;//人类,这次我们修改一下Person类//在Person类生成对象的同时,Name属性,Sex属性和Age属性的值就应该确定,而不应该在生成对象后再进行设置,这是不符合客观规律的。//在对象实例化的同时对属性进行设置,就要用到“构造器”publicPerson(){this.name=小王;this.age=22;this.sex=true;}//带有参数的构造器publicPerson(stringname,intage,boolsex){this.Name=name;this.Age=age;this.sex=sex;//这里,Sex属性}//带有部分参数的构造器publicPerson(intage,boolsex){this.Name=小?王ª?;this.Age=age;this.sex=sex;//这里,Sex属性}//带有部分参数的构造器publicPerson(boolsex){this.Name=小?王ª?;this.Age=22;this.sex=sex;//这里,Sex属性}publicstringName{get{//get访问器必须返回一个值,作为该属性的“属性值returnthis.name;}set{//set访问器具有一个局部变量value,该值是从外部设置给该属性的值this.name=value;}}publicintAge{get{returnage;}set{age=value;}}//性别属性,这次我们去掉了Sex的set访问器。//由于通过构造器已经设置了Sex属性,所以无需通过set访问器来设置该属性//按照一般情况,Sex属性在对象实例化后,不应该设置该属性。//属性可以只具有set访问器或get访问器,即“只读”或“只写”的属性publicboolSex{get{returnsex;}}//显示个人信息的方法publicvoidShowMe(){Console.WriteLine(姓名:{0},性别:{1},年龄:{2}岁。,this.Name,this.Sex,this.Age);}}classProgram{staticvoidMain(string[]args){//删除掉publicPerson()构造器,查看程序编译情况//删除掉所有的构造器,查看程序编译情况Personperson=newPerson();person.ShowMe();//person.Sex=true;//只读属性禁止了给属性设置值person=newPerson(false);person.ShowMe();person=newPerson(18,true);person.ShowMe();person=newPerson(小丽,23,false);person.ShowMe();}}}我们给Person类增加了若干个“构造器”,并修改Sex属性为只读,从而让Person类更更符合客观实际。对于任何一个类,可以不人为提供构造器,此时编译器会赋予类一个“默认构造器”,即没有参数的构造器。这个构造器什么也不做,仅仅是为了new操作符能够得以指定一个构造器。而我们一旦定义了有参数的构造器,编译器便会这样认为“这个类的对象必须提供参数才能够实例化”,便不再会提供无参数的默认构造器了。所以一个类如果同时需要有默认构造器和有参数的构造器,则默认构造器必须手动提供,不要指望编译器会自动生成。现在我们可以完整定义new操作符的语法规范:类名变量名=new类构造器名(构造器实参数列表);C#语言第一部分面向对象(四)字段默认值C#中,可以给类字段以一个默认值,这样一方面可以简化构造器的代码,另一方面较为直观,是一种推荐的方式。这一章比较简单,可结合上一章深入理解构造器的作用。看代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceEdu.Study.OO.DefaultValue{//还是那个人类。//通过构造器publicclassPerson{//保存名字的字段,默认值为小王privatestringname=小王;//保存年龄的字段,默认值为0privateintage=22;//保存性别的字段,true为男性,false为女性,默认值为女性privateboolsex=false;//默认构造器,由于字段定义了默认值,所以构造器中无需给字段赋值publicPerson(){}//带有参数的构造器,这里的构造器给所有字段都赋了值,所以无视默认值publicPerson(stringname,intage,boolsex){this.Name=name;this.Age=age;this.sex=sex;}//带有部分参数的构造器,这里只给sex和age字段赋值,而name字段本身就有默认值publicPerson(intage,boolsex){this.Age=age;this.sex=sex;//这里,Sex属性}//带有部分参数的构造器,这里只给sex字段赋值,其它字段都有默认值publicPerson(boolsex){this.sex=sex;}publicstringName{get{//get访问器必须返回一个值,作为该属性的“属性值returnthis.name;}set{//set访问器具有一个局部变量value,该值是从外部设置给该属性的值this.name=value;}}publicintAge{get{returnage;}set{age=value;}}publicboolSex{get{returnsex;}}//显示个人信息的方法publicvoidShowMe(){Console.WriteLine(姓名:{0},性别:{1},年龄:{2}岁º。,this.Name,this.Sex,this.Age);}}classProgram{staticvoidMain(string[]args){//删除掉publicPerson()构造器,查看程序编译情况//删除掉所有的构造器,查看程序编译情况Personperson=newPerson

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功