C#程序设计课件第5章面向对象编程_第1页
C#程序设计课件第5章面向对象编程_第2页
C#程序设计课件第5章面向对象编程_第3页
C#程序设计课件第5章面向对象编程_第4页
C#程序设计课件第5章面向对象编程_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第5章 C#面向对象编程,面向对象编程是一种功能强大的程序设计方法,它以“数据控制访问代码”为主要原则,围绕数据来组织程序。在进行面向对象编程时需要定义数据和作用于数据上的方法。这样,数据类型可以精确地定义出哪种类型的操作可以应用于该数据。 类是面向对象编程的基础,在类中定义了数据和实现这些数据的代码。代码包含在方法中。类、方法是C#的基础。,2,本章学习要点,理解类的定义 掌握声明类的方法 掌握构造函数和析构函数方法 理解并掌握访问修饰符的用法 掌握类事件的声明以及为类定义事件,3,5.1 类的基本概念,类是一个定义对象形式的模版。它指定了数据以及操作数据的代码。C#使用类的规范来构造对象,而对象是类的实例。从定义上来说,类是一个数据结构,包含数据成员(属性、字段)、功能成员(方法、事件、构造函数和析构函数等)和嵌套类型。,对象,属性,颜色,价格,型号,行为,起动,停车,加速,属性,颜色,车轮数量,行为,行进,打铃,属性,颜色,品种,行为,睡,吃,.1.1 类,类是一类对象的抽象,用于在程序中模拟现实生活的事物 对象是现实中的事物 如何描述现实的事物:特征和动作,对应类中的数据成员和方法,语法:,访问修饰符 class , / 类的主体 ,示例: class Employee / 类的主体 ,/ 成员变量 / 成员方法,类修饰符,语法:,5.1.2 成员变量,访问修饰符,数据类型,成员变量;,private,protected,internal,public,_color,model,.,price,int,char,.,bool, class Car /汽车的数据成员 public string Color; /颜色 public string Model; /型号 public float price; /价格 ,访问成员变量,步骤 1:创建一个类的对象,Car c=new Car();,步骤 2:使用点号访问成员变量,c.Color=“黑色“; /设置汽车c的颜色 c.price=1000000; /设置汽车c的价格,访问修饰符,Car 类,private 成员,protected 成员,public 成员,internal 成员,Class 类,只有 Student 类在 Teacher 类都在同一程序集中,才可访问internal成员,不可访问,不可访问,可以访问,static 成员,readonly 成员,访问修饰符,注意,C/C+不允许使用未经初始化的变量。 C#:静态字段在类的装载时初始化; 非静态字段在类的实例创建时进行初始化。,字段访问,class Employee private static string name; private static string id; static void Main(string args) name = Console.ReadLine(); id = Console.ReadLine(); ,直接访问字段 不经验证,用方法访问字段,class Employee private static string name; private static string id; public void SetId(value) / 验证输入长度小于 2 if (id.Length 2) id = value; public string GetId() returnid; ,方法 SetId(Value) 和 GetId() 分别读取和写入职员 ID, Employee emp; emp.SetId(“A1“); string Department = emp.Get() ,每次都调用 GetId() 和 SetId() 方法会很繁琐,用属性解决!,5.1.3属性,class Employee private static string name; private static string id; public string Id get return id; set / 验证输入长度小于 2 if (id.Length 2) id = value; ,读取 ID 时调用,将值赋给 ID 时调用,访问修饰符 数据类型 属性名 get ; set ; ,读/写属性,可以赋值和检索值,属性,访问修饰符 数据类型 属性名 get ; ,只读属性,只能检索值,属性,访问修饰符 数据类型 属性名 set ; ,只写属性,只能赋值,属性,访问修饰符static 数据类型 属性名 get; set; ,静态属性,应用于整个类而不是类的实例,只能访问类的静态成员,class SavingsAccount / 类字段用于存储帐号、余额和已获利息 private int _accountNumber; private double _balance; private double _interestEarned; / 利率是静态的,因为所有帐户获得的利息相同 private static double _interestRate; / 构造函数初始化类成员 public SavingsAccount(int accountNumber, double balance) this._accountNumber = accountNumber; this._balance = balance; / 只读 AccountNumber 属性 public int AccountNumber get return _accountNumber; ,定义和调用属性,只读属性,static void Main(string args) / 创建 SavingsAccount 的对象 SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000); Console.WriteLine(“输入到现在为止已获得的利息和利率“); objSavingsAccount.InterestEarned = Int64.Parse(Console.ReadLine(); SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine(); objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate; Console.WriteLine(“获得的总利息为: 0“, objSavingsAccount.InterestEarned); ,public double InterestEarned get return _interestEarned; set / 验证数据 if (value 0.0) Console.WriteLine(“利息 不能为负数“); return; _interestEarned = value; ,将设置 InterestEarned 属性,static void Main(string args) / 创建 SavingsAccount 的对象 SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000); Console.WriteLine(“输入到现在为止已获得的利息和利率“); objSavingsAccount.InterestEarned = Int64.Parse(Console.ReadLine(); SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine(); objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate; Console.WriteLine(“获得的总利息为: 0“, objSavingsAccount.InterestEarned); ,将设置 InterestRate 属性,public static double InterestRate get return _interestRate; set / 验证数据 if (value 0.0) Console.WriteLine(“利率不能为负数“); return; else _interestRate = value / 100; ,static void Main(string args) / 创建 SavingsAccount 的对象 SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000); Console.WriteLine(“输入到现在为止已获得的利息和利率“); objSavingsAccount.InterestEarned = Int64.Parse(Console.ReadLine(); SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine(); objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate; Console.WriteLine(“获得的总利息为: 0“, objSavingsAccount.InterestEarned); ,将检索 Balance 和 InterestRate 属性,public double Balance get if (_balance 0) Console.WriteLine(“没有可用余额“); return _balance; ,5.2 方法,对象的行为,接听,响铃,挂断,PickUp() . /接电话 ,Ring() . /响铃 ,Hang() . /挂断 ,声明方法,语法,访问修饰符(可选),默认情况下为 private,访问修饰符 返回类型 (参数列表) / 方法主体 ,如果不需要返回任何值,方法可能返回 void 数据类型,演示:示例 3,调用方法 5,private void Accept() Console.WriteLine(“请输入复数的实部“); _r=int.Parse(Console.ReadLine(); Console.WriteLine(“请输入复数的虚部“); _i=int.Parse(Console.ReadLine(); /显示复数值 void showResult() Console.WriteLine(“相加之和“); Console.WriteLine(_r+“+“+_i+“i“); /将两个复数相加 Complex Add(Complex c) c._r+=this._r; c._i+=this._i; return c; ,接收实部和虚部的值,显示实部和虚部的值,请参阅对象的实例变量,b与 c 相关联,STAThread static void Main(string args) Complex a=new Complex(); Complex b=new Complex(); a.Accept(); b.Accept(); Complex e=a.Add(b); e.showResult(); Console.ReadLine(); ,方法重载,重载:指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同) 作用:对不同数据执行相似的功能 例如: 求最大值 注意: 参数表不同:是指参数个数不同或参数类型不同 不能根据返回值不同进行重载,方法重载2,/基于参数不同的方法重载 public int greatest(int x,int y) if(xy) return x; else return y; public int greatest(int x,int y, int z ) if(xy ,具有不同数量的参数的方法重载,方法重载,/基于参数类型的方法重载 public int greatest(int x,int y) if(xy) return x; else return y; public double greatest(double x,double y) if (xy) return x; else return y; ,具有不同类型的参数的方法重载,5.3构造函数和析构函数,构造函数是类的一种特殊方法,一般用于对类的数据成员进行初始化。每次创建类的实例都会调用它。,访问修饰符,(), / 构造函数的主体 ,语法:, / 默认构造函数 Car() color = “black“; ,示例:,参数化构造函数,访问修饰符, (), / 构造函数的主体 ,语法:,(参数列表), / 参数化构造函数 Car(string str) color =str; ,示例:,析构函数,是用于执行清除操作的特殊方法 一个类只能有一个析构函数 析构函数不能被继承 析构函数不能被显示或手动调用,只能由系统的垃圾回收器自动调用,(), / 析构函数的主体 ,语法:, Car( ) ,示例:,5.5 类事件,事件的定义是:在C#中,事件就是指当对象有重要情况发生时,类通知类的客户程序的办法。事件最为常见的用途就是图形用户界面,即当用户对界面控件进行操作时,如选择一个命令,就激发了表示控件的类的事件。 简单的说,事件是使得类和对象提供通知的成员。用户在使用时,可以通过提供事件句柄来为事件添加可执行代码。,31,事件,“请听题”,集中注意力聆听,其他人,事件源,事件的发布者,事件的订阅人,不关心,未订阅该事件,定义事件 为对象订阅该事件 将发生的事件通知给订阅人,定义事件,访问修饰符 event 委托名 事件名;,语法,public delegate void delegateMe(); private event delegateMe eventMe;,订阅事件,eventMe += new delegateMe(objA.Method); eventMe += new delegateMe(objB.Method);,通知订阅对象,if(condition) eventMe(); ,调用订阅特定事件的对象的所有委托,演示:示例 4,示例,class TestEvents STAThread static void Main(string args) / 委托的对象 Delegate objDelegate = new Delegate(); / Class

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论