C面向对象的编程一类和对象.ppt_第1页
C面向对象的编程一类和对象.ppt_第2页
C面向对象的编程一类和对象.ppt_第3页
C面向对象的编程一类和对象.ppt_第4页
C面向对象的编程一类和对象.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

C#面向对象编程(一) 类和对象 berry博客:,面向对象程序设计的基本概念,对象: 现实世界中某个具体的物理实体在计算机中的逻辑体现。,类: 同种对象的集合与抽象。 属于类的对象是该类的一个实例。,封装: 将代码和其操作的数据捆绑在一起,防止外部对数据和代码的干扰。数据和代码以封装的形式链接起来就构成了一个对象。,继承: 一个对象获得另一个对象的属性。通常一个对象可以从它的父类继承所有的通用属性。,多态: 一个接口,多种方法。,4.1 类和对象,4.1.1 类及成员 4.1.2 类的构造函数和析构函数 4.1.3 类的静态成员 4.1.4 对象的创建与使用,4.1.1 类及成员,1、类 类是一种对数据成员、函数成员等进行封装的数据结构,类中包括域和方法等,域表示对象的状态,方法表示对象所具有的行为。类的定义包括类头和类体,其中类体用一对大括号括起,在类体中包括域、方法、属性、索引、嵌套类定义等成员。,类定义基本格式: class 类名 /类的成员定义 ,类的成员可以有: 字段、方法、属性、索引器、事件、运算符等,2、类的成员 类可以包含以下这些成员: 字段:用于保持一个值的成员变量; 方法:对数据进行加工的代码,是类中完成一个功能的函数; 属性:智能字段,与字段类似,但可以实现只读或只写操作; 常量:值不能改变的字段; 事件:用于触发一些代码的运行,比如鼠标单击可以触发一些事件; 运算:对一些标准的运算符进行重载并添加到类中,可以使代码更直接。,3、类成员的访问权限,public:允许外部代码访问; private:不允许别的类访问,即使是派生类也不能访问; protected:不允许别的类访问,派生类可以访问; internal:相同名称空间中的类可以访问。,类成员的访问权限用来规定类的一个成员对它所在的类之外的代码是可见还是不可见。,4、 定义类中的域(字段),域表示事物的性质状态,定义域的方法与变量的定义方法相同。即: 类型名 域名; int age;,定义类和其域成员 class Student private string StudentName; ,4.1.2类的构造函数和析构函数,1、构造函数:构造函数也称构造器,是一种特殊的方法,专门用于创建对象并完成初始化工作。,方法名与类的名字相同; 没有返回类型,也不能写void; 主要作用是完成对象的初始化工作; 不能显式调用,而是由new运算符来调用,即产生新的对象时调用; 当创建一个新的对象时,系统会自动调用该类的构造函数; 如果没有创建构造函数,系统会产生一个默认的构造方法,不带参数而且方法体为空。,构造函数举例(一),using System; class MyClass Myclass( ) Console.WriteLine(“我的构造函数。”); public static void Main( ) MyClass cM=new MyClass( ); ,new运算符创建类的一个实例。,如果没有MyClass方法,则系统产生一个默认构造函数如下: MyClass( ) ,构造函数举例(二),using System; class userName string uname; public userName( string name) uname=name; public void ShowName( ) Console.WriteLine(“name”); public static void Main( ) userName un1=new userName(“tony”); un1.ShowName( ); ,new运算符创建类的一个实例,并给出参数tony 。,定义构造方法,将参数赋值给域变量uname。,2、析构函数,创建实例时,系统会为实例分配空间,当实例用完以后,就要回收这些分配出去的空间,所以释放对象时要用析构函数。析构方法是用符号“”开始的并与类同名的方法,该方法不带参数,没有返回类型也不带修饰符。 一个类的析构方法最多只有一个,如果没有提供析构方法,系统会自动生成一个。 析构方法不能由程序显式调用,而由系统自动进行。 在.net中,不必太关注内存管理,因为.net框架垃圾回收器会自动地管理对象的内存分配和释放。,析构函数举例,using System; class First First( ) Console.WriteLine(“constructor of First”); First( ) Console.WriteLine(“destructor of First”); public static void Main( ) First ob=new First( ); ,程序运行结果为:constructor of First destructor of First,4.1.3 对象的创建与使用,对象首先要进行声明: 类名 变量名; 创建对象的一般格式如下:变量名=new 构造方法(参数); 声明和创建可以合写成一句: 类名 变量名=new 构造方法(参数); 如: Person p1 = new Person(“Jenny”);,new是新建对象的运算符,开辟空间并执行相应的构造方法,返回该对象的一个引用(对象实体所在的内存地址) 。,name,age,.,p1,对象创建举例,定义一个Student类,该类由三个域年龄、姓名和性别; 为该类编写构造函数,参数为三个:int 、 string 、string ; 在主方法中创建一个实例s1,对域进行初始化并输出三个域的值。 using System; class Student int age; string name; string sex; public Student( int a, string na, string s) age=a; name=na; sex=s; ,class App public staitc void Main( ) Student s1=new Student(23,”zhanghua”,”female”); Console.WriteLine(“0,1,2”,s1.age,,s1.sex); ,4.1.4 类的静态成员,类可以有两类成员:静态成员和实例成员。 实例成员会被类的每个实例复制;而静态成员只会被复制一次并在整个应用程序的生命周期内都存在。默认情况下,成员被定义为实例成员,如加上static关键字则被定义为静态成员。 * Main( )主方法一定是静态的。,using System; class Myclass public Myclass() number+; static public int number=1; class App public static void Main( ) Console.WriteLine(Myclass.number); Myclass m1=new Myclass( ); Console.WriteLine(Myclass.number); Myclass m2=new Myclass( ); Console.WriteLine(Myclass.number); ,程序运行结果为 1 2 3,如果不是静态成员,只能用m1.number或m2.number,而不能直接用Myclass.number,静态成员和实例成员比较,程序区 数据区 静态数据区 Myclass.number:1 动态数据区 m1 m2,程序区 数据区 静态数据区 动态数据区 m1:number m2:number,4.2 类的方法,4.2.1 方法的定义和调用 4.2.2 方法的重载 4.2.3 ref 和out参数,4.2.1 方法的定义和调用,方法表示类的动态行为,即类所具有的功能和操作。C#的方法是完成某种操作的程序片断,由方法头和方法体组成。 修饰符 返回值类型 方法名(形式参数列表) 方法体各语句; 如果方法有返回值,则方法体中有return语句。,public void SayHello( ) System.Console.WriteLine(“Hello”); ,方法的定义和调用举例1,定义一个方法,输出对象成员的值。 using System; class Student int age; string name; string sex; public Student( int a, string na, string s) age=a; name=na; sex=s; public void Show( ) Console.WriteLine(“0,1,2”,this.age,,this.sex); ,class App public staitc void Main( ) Student s1=new Student(23,”zhanghua”,”female”); s1.Show( ); ,方法的定义和调用举例2,为Student类添加一个成绩域,并添加pass方法对及格与否进行判断。 using System; class Student int age; string name; string sex; public int score; public Student( int a, string na, string s) age=a; name=na; sex=s; public bool passornot( ) if(score=60) return(true); else return(false); ,class App public staitc void Main( ) Student s1=new Student(23,”zhanghua”,”female”); s1.score=78; bool ps=s1.passornot( ); if(ps) Console.WriteLine(“pass”); else Console.WriteLine(“not pass”); ,4.2.2 方法的重载,重载的意思是可以多次使用一个方法,但是每次给它的参数值都不同;或者说方法含义相同但参数不同。重载是实现多态性的一种方式。,using System; class Myclass public void WriteItem(int i) Console.WriteLine(“integer”); public void WriteItem(float i) Console.WriteItem(“float”);,public static void Main() WriteItem(1); WriteItem(2.5); ,对构造函数进行重载,using System; class Student int age; string name; string sex; public Student( int a, string na, string s) age=a; name=na; sex=s; public Student( int a, string na) age=a; name=na; ,class App public staitc void Main( ) Student s1=new Student(23,”zhanghua”,”female”); Student s2=new Student(23,”zhanghua”); Console.WriteLine(“0,1,2”,s1.age,,s1.sex); Console.WriteLine(“0,1,2”,s2.age,); ,4.2.3 ref 和out参数,在方法中可以由返回值,但是往往只能返回一个值。如果想返回多个值,只能多次使用方法。 如:int num1=A.GetNumber( ); int num2=A.GetNumber( ); int num3=A.GetNumber( ); 希望能用一个方法返回多个值,即 int num1,num2,num3; A.GetNumber(num1,num2,num3); 但是参数的值传递方式使得方法对参数所做的改变不能保留。,class Myclass GetNumber(num1,num2,num3); num1+; num1+; num1+; public static void Main( ) int num1=1,num2=2,num3=3; Myclass A=new Myclass( ); A.GetNumber(num1,num2,num3); Console.WriteLine(“0,1,2”,num1,num2,num3); ,实参传递值给形式参数,但是形式参数是另外的存储单元,形式参数的改变不会反映在实际参数上。,使用ref参数控制在调用方法时,方法对参数做的更改都反映在该变量中,达到返回多个值的目的。,class Myclass public static void testref(ref char i) i=b; public static void testnoref(char i) i=c; public static void Main( ) char i=a; testre

温馨提示

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

评论

0/150

提交评论