C面向对象编程基础学习笔记.pptx
《C面向对象编程基础学习笔记.pptx》由会员分享,可在线阅读,更多相关《C面向对象编程基础学习笔记.pptx(59页珍藏版)》请在咨信网上搜索。
1、1第第3 3章章 C#C#面向对象编程基础面向对象编程基础面向对象程序设计是相对结构化程序设计而言的。使面向对象程序设计是相对结构化程序设计而言的。使用面向对象思想编制软件,是当前最流行的程序设用面向对象思想编制软件,是当前最流行的程序设计方法。本章介绍面向对象程序设计的一些基本概计方法。本章介绍面向对象程序设计的一些基本概念和技术。念和技术。23.1 继承继承在在2.1.5节,定义了一个描述个人情况的节,定义了一个描述个人情况的Person类。如类。如需要描述一个雇员,当然可以从头开始定义需要描述一个雇员,当然可以从头开始定义Employee类用来描述雇员。但这样不能利用类用来描述雇员。但这
2、样不能利用Person类中已定义的函数和数据。比较好的方法是类中已定义的函数和数据。比较好的方法是以以Person类为基类,派生出类为基类,派生出Employee类,类,Employee类继承了类继承了Person类的数据成员和函数成类的数据成员和函数成员,既员,既Person类的数据成员和函数成员成为类的数据成员和函数成员成为Employee类的成员。这个类的成员。这个Employee类叫以类叫以Person类为基类的派生类,这是类为基类的派生类,这是C#提出的方法。提出的方法。C#用继用继承的方法,实现代码的重用。承的方法,实现代码的重用。33.1.1 3.1.1 派生类的声明格式派生类的
3、声明格式 派生类的声明格式如下:派生类的声明格式如下:附加说明附加说明 类修饰符类修饰符 class class 派生类名派生类名:基类名基类名 类体类体 雇员类雇员类EmployeeEmployee定义如下:定义如下:class Employee:Person class Employee:Person private string department;private string department;private decimal salary;private decimal salary;public Employee(string Name,int Age,public Emplo
4、yee(string Name,int Age,string D,decimal S):base(Name,Age)string D,decimal S):base(Name,Age)department=D;department=D;salary=S;salary=S;4public new void Display()/public new void Display()/注意注意newnew base.Display();/base.Display();/访问基类的同名方法访问基类的同名方法Console.WriteLine(Console.WriteLine(“部门:部门:0 0 薪金:
5、薪金:11”,department,salary);department,salary);主函数如下:主函数如下:class Class1class Class1 static void Main(string args)static void Main(string args)Employee OneEmployeeEmployee OneEmployee=new=new Employee(Employee(“李四李四”,30,30,计算机系计算机系,2000);,2000);OneEmployee.Display();OneEmployee.Display();53.1.2 3.1.2 隐
6、藏基类方法隐藏基类方法 在派生类中,可以声明与基类完全相同的新方在派生类中,可以声明与基类完全相同的新方法,完全相同是指和基类方法的函数类型、函数名、法,完全相同是指和基类方法的函数类型、函数名、参数类型和个数都相同。如上例中的参数类型和个数都相同。如上例中的方法方法DisplayDisplay()()。这样做不算错误,但会导致编译器发出警告。这样做不算错误,但会导致编译器发出警告。如果增加如果增加newnew修饰符,表示认可,编译器不再发出修饰符,表示认可,编译器不再发出警告。请注意,警告。请注意,声明与基类完全相同新方法,并不声明与基类完全相同新方法,并不是移走基类同名方法,只是在派生类中
7、必须用如下是移走基类同名方法,只是在派生类中必须用如下格式访问格式访问基类中同名方法基类中同名方法:base.base.Display();Display();也就是说派生类的新方法隐藏了也就是说派生类的新方法隐藏了基类同名方法。基类同名方法。63.1.3 base 关键字关键字 base base关键字用于从派生类中访问基类成员,它有两关键字用于从派生类中访问基类成员,它有两种基本用法:种基本用法:在定义派生类的构造函数中,指明要调用的基类构在定义派生类的构造函数中,指明要调用的基类构造函数,由于基类可能有多个构造函数,根据造函数,由于基类可能有多个构造函数,根据basebase后的参数类型
8、和个数,指明要调用哪一个基类构造后的参数类型和个数,指明要调用哪一个基类构造函数。函数。在派生类的方法中调用基类中被派生类隐藏的方法。在派生类的方法中调用基类中被派生类隐藏的方法。73.1.4 C#语言类继承特点语言类继承特点 C#C#语言只允许单继承,即派生类只能有一个基类。语言只允许单继承,即派生类只能有一个基类。C#C#语言继承是可以传递的,语言继承是可以传递的,如果如果C C从从B B派生,派生,B B从从A A派生,那么派生,那么C C不不但继承但继承B B的成员,还要继承的成员,还要继承A A中的成员。中的成员。派生类可以添加新成员,但不能删除基类中的成员派生类可以添加新成员,但不
9、能删除基类中的成员派生类不继承基类的构造函数和析构函数。能继承基类的属性。派生类不继承基类的构造函数和析构函数。能继承基类的属性。派生类可以派生类可以隐藏隐藏基类的同名成员,如果在派生类中基类的同名成员,如果在派生类中隐藏了隐藏了基类基类同名成员,基类该成员在派生类中就不能被直接访问,只能通同名成员,基类该成员在派生类中就不能被直接访问,只能通过过base.base.基类方法名访问。基类方法名访问。派生类对象也是其基类的对象,但基类对象却不一定是其派生派生类对象也是其基类的对象,但基类对象却不一定是其派生类的对象。例如,前边定义的雇员类类的对象。例如,前边定义的雇员类EmployeeEmplo
10、yee是是PersonPerson类的派类的派生类,所有雇员都是生类,所有雇员都是PersonPerson类的成员,但很多类的成员,但很多PersonPerson类的成员类的成员并不是雇员,可能是学生、自由职业者、儿童等。因此并不是雇员,可能是学生、自由职业者、儿童等。因此C#C#语言语言规定,基类的引用变量可以引用其派生类对象,但派生类的引规定,基类的引用变量可以引用其派生类对象,但派生类的引用变量不可以引用其基类对象。用变量不可以引用其基类对象。83.2 类的成员类的成员 由于由于C#程序中每个变量或函数都必须属程序中每个变量或函数都必须属于一个类或结构,不能象于一个类或结构,不能象C或或
11、C+那样建立全那样建立全局变量,因此所有的变量或函数都是类或结局变量,因此所有的变量或函数都是类或结构的成员。类的成员可以分为两大类构的成员。类的成员可以分为两大类:类本身类本身所声明的以及从基类中继承来的。所声明的以及从基类中继承来的。93.2.1 类的成员类型类的成员类型 类的成员包括以下类型类的成员包括以下类型 局部变量局部变量:在在forfor、switchswitch等语句中和类方法中定义的变量等语句中和类方法中定义的变量 字段字段:即类中的变量或常量,包括静态字段、实例字段、常量即类中的变量或常量,包括静态字段、实例字段、常量 和只读字段。和只读字段。方法成员:即类中的方法,包括静
12、态方法和实例方法。方法成员:即类中的方法,包括静态方法和实例方法。属性:按属性指定的属性:按属性指定的getget方法和方法和setset方法对字段进行读写。属方法对字段进行读写。属 性本质上是方法。性本质上是方法。事件:代表事件本身,同时是事件处理函数的代表。事件:代表事件本身,同时是事件处理函数的代表。索引指示器:允许象数组那样使用索引访问类中的数据成员。索引指示器:允许象数组那样使用索引访问类中的数据成员。重载操作符:采用重载操作符的方法定义类中特有的操作。重载操作符:采用重载操作符的方法定义类中特有的操作。构造函数和析构函数。构造函数和析构函数。103.2.2 3.2.2 类成员访问修
13、饰符类成员访问修饰符 访问修饰符有访问修饰符有4 4种种,用于指定类成员的可访问性:用于指定类成员的可访问性:PrivatePrivate:protectedprotected:publicpublic:Internal:Internal:内部成员只能在同一程序集中的文件中内部成员只能在同一程序集中的文件中才是可以访问的,一般是同一个应用才是可以访问的,一般是同一个应用(Application)(Application)或库或库(Library)(Library)。113.3 3.3 类的字段和属性类的字段和属性 一般把类或结构中定义的变量和常量叫一般把类或结构中定义的变量和常量叫字段。属性不
14、是字段,本质上是定义修改字字段。属性不是字段,本质上是定义修改字段的方法,由于属性和字段的紧密关系,把段的方法,由于属性和字段的紧密关系,把它们放到一起叙述。它们放到一起叙述。123.3.1 3.3.1 静态字段、实例字段、常量和只读字段静态字段、实例字段、常量和只读字段 见下例:见下例:public public class Testclass Testpublicpublic const int intMax=int.MaxValue;const int intMax=int.MaxValue;/常量必须赋初值常量必须赋初值public int x=0;public int x=0;/实例
15、字段,每个实例创建不同实例字段,每个实例创建不同x xpublic readonly int y=0;public readonly int y=0;/只读字段,每个实例创建不同只读字段,每个实例创建不同y ypublic static int cnt=0;public static int cnt=0;/静态字段静态字段,所有实例共用一个所有实例共用一个cntcntpublic Test(int x1,int y1)public Test(int x1,int y1)/构造函数构造函数 /intMax=0;/intMax=0;错误,在构造函数不能修改常量错误,在构造函数不能修改常量x=x1;
16、x=x1;/在构造函数允许修改实例字段在构造函数允许修改实例字段y=y1;y=y1;/在构造函数允许修改只读字段在构造函数允许修改只读字段cnt+;/cnt+;/每创建一个对象都调用构造函数,每创建一个对象都调用构造函数,/用此语句可以记录对象的个数用此语句可以记录对象的个数 13public void Modify(int x1,int y1)public void Modify(int x1,int y1)/intMax=0;/intMax=0;和和y=10;y=10;错误,不能修改常量和只读字段错误,不能修改常量和只读字段x=x1;x=x1;cnt=y1;cnt=y1;class Cla
17、ss1class Class1 static void Main(string args)static void Main(string args)Test T1=new Test(100,200);Test T1=new Test(100,200);T1.x=40;/T1.x=40;/引用实例字段方法:实例名引用实例字段方法:实例名.实例字段名实例字段名Tt=0;/Tt=0;/引用静态字段方法:类名引用静态字段方法:类名.静态字段名静态字段名int z=T1.y;int z=T1.y;/引用只读字段引用只读字段z=Test.intMax;z=Test.intMax;/引用常量引用常量 143
18、.3.2 3.3.2 属性属性 C#C#语言支持组件编程,组件也是类,组件用属语言支持组件编程,组件也是类,组件用属性、方法、事件描述。属性不是字段,但必然和类性、方法、事件描述。属性不是字段,但必然和类中的某个或某些字段相联系,属性定义了得到和修中的某个或某些字段相联系,属性定义了得到和修改相联系的字段的方法。改相联系的字段的方法。C#C#中的属性更充分地体现中的属性更充分地体现了对象的封装性:不直接操作类的数据内容,而是了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,借助于通过访问器进行访问,借助于getget和和setset方法对属性方法对属性的值进行读写。访问属性值的语
19、法形式和访问一个的值进行读写。访问属性值的语法形式和访问一个变量基本一样,使访问属性就象访问变量一样方便,变量基本一样,使访问属性就象访问变量一样方便,符合习惯。在符合习惯。在类的基本概念一节中,定义一个描述类的基本概念一节中,定义一个描述个人情况的类个人情况的类PersonPerson,其中字段,其中字段namename和和ageage是私有是私有字段,记录姓名和年龄,外部通过公有方法字段,记录姓名和年龄,外部通过公有方法SetNameSetName和和SetAgeSetAge修改这两个私有字段。现在用属修改这两个私有字段。现在用属性来描述姓名和年龄。性来描述姓名和年龄。例子如下:例子如下:
20、15using System;using System;public class Personpublic class Person private string P_name=private string P_name=张三张三;/P_name;/P_name是私有字段是私有字段private int P_age=12;private int P_age=12;/P_age/P_age是私有字段是私有字段public void Display()/public void Display()/类的方法声明,显示类的方法声明,显示姓名和年龄姓名和年龄 Console.WriteLine(Cons
21、ole.WriteLine(“姓名姓名:0,:0,年龄:年龄:11”,P_name,P_age);P_name,P_age);public string Name public string Name/定义属性定义属性NameName getgetreturn P_name;return P_name;setsetP_name=value;P_name=value;public int Age public int Age/定义属性定义属性AgeAge getgetreturn P_age;return P_age;setsetP_age=value;P_age=value;16public
22、class Testpublic class Test public static void Main()public static void Main()Person OnePerson=new Person();Person OnePerson=new Person();OnePerson.Name=OnePerson.Name=田七田七;/;/通过通过setset方法修改变量方法修改变量P_NameP_Namestring s=OnePerson.Name;string s=OnePerson.Name;/通过通过getget方法得到变量方法得到变量P_NameP_Name值值/下句错误
23、下句错误TestTest不是不是PersonPerson派生类,不能修改派生类,不能修改AgeAge属性属性/OnePerson.Age=20;/OnePerson.Age=20;int x=OnePerson.Age;/int x=OnePerson.Age;/通过定义属性,既保证了姓名通过定义属性,既保证了姓名 /和年龄按指定方法修改和年龄按指定方法修改OnePerson.Display();/OnePerson.Display();/语法形式和修改、语法形式和修改、/得到一个变量基本一致,符合习惯得到一个变量基本一致,符合习惯 只有只有setset访问器的属性值只能进行设置而不能读出,只
24、有访问器的属性值只能进行设置而不能读出,只有getget访问器的属性值是只读的,不能改写,同时具有访问器的属性值是只读的,不能改写,同时具有setset和和getget访问器表明属性值的读写都是允许的。访问器表明属性值的读写都是允许的。173.4 类的方法类的方法 3.4.1 方法的声明方法的声明 方法的声明格式如下方法的声明格式如下:方法修饰符方法修饰符 返回类型返回类型 方法名方法名(形参列表形参列表)方法体方法体 3.4.2 3.4.2 方法中参数的传递方法中参数的传递值参数,不含任何修饰符值参数,不含任何修饰符(值类型值类型、引用类型引用类型不同不同)引用参数,以引用参数,以refre
25、f修饰符声明修饰符声明(主要用于主要用于值类型值类型)输出参数,以输出参数,以outout修饰符声明修饰符声明(主要用于主要用于值类型值类型)using System;using System;class gpublic int a=0;/class gpublic int a=0;/类定义类定义 18class Class1class Class1 public static void F1(ref char i)public static void F1(ref char i)/引用参数引用参数 i=b;i=b;public static void F2(char i)public sta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 基础 学习 笔记
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。