第4章-类和对象-2_第1页
第4章-类和对象-2_第2页
第4章-类和对象-2_第3页
第4章-类和对象-2_第4页
第4章-类和对象-2_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、访问修饰符访问修饰符类的声明类的声明类的实例化类的实例化 仿照仿照Student类创建类创建Teacher类,类, Teacher类中包含成员变类中包含成员变量量TeaNo(工号工号),TeaName(教师姓名教师姓名),TeaAge(年龄年龄),TeaTitle(职称职称)及成员函数及成员函数SetInfomation()(设置教师基本信设置教师基本信息息),GetInformation()(获取教师基本信息获取教师基本信息)。最后在。最后在Main()()函数中创建函数中创建Teacher类对象类对象Jane,并访问成员变量及成员函数。,并访问成员变量及成员函数。类和对象类和对象-2类的构

2、造函数类的构造函数构造函数的重载构造函数的重载静态成员和非静态成员静态成员和非静态成员构造函数是一种特殊的成员函数。构造函数是一种特殊的成员函数。当创建一个类的实例的时候构造函数会自动被编译器调用。当创建一个类的实例的时候构造函数会自动被编译器调用。构造函数被用于初始化类的成员变量。构造函数被用于初始化类的成员变量。构造函数的名字与包含它的类的名字同名,并且不定义返回值类型,构造函数的名字与包含它的类的名字同名,并且不定义返回值类型,即使即使void也不可以。也不可以。语法:语法:访问修饰符访问修饰符 (参数列表参数列表)/构造函数体,初始化工作构造函数体,初始化工作示例:示例:public

3、Student(string StuNo,string StuName,string StuSex)/构造函数体构造函数体 构造函数修饰符一般为构造函数修饰符一般为public参数列表个数与成员变量个参数列表个数与成员变量个数相同,且一一对应数相同,且一一对应构造函数体:构造函数体:this.成员变量名成员变量名 = 成员变量名;成员变量名;示例:示例:public Student(string StuNo,string StuName,string StuSex)this.StuNo = StuNo;this.StuName = StuName;this.StuSex = StuSex; p

4、ublic class Studentprivate string StuNo;private string StuName;private string StuSex;public Student(string StuNo,string StuName, string StuSex)this.StuNo = StuNo;this.StuName = StuName;this.StuSex = StuSex; public void ShowInfo()Console.WriteLine(StuNo);Console.WriteLine(StuName);Console.WriteLine(S

5、tuSex);public static void Main()Student Tom = new Student(“A001”,”Tom”,”M”);Tom.ShowInfo();this指向当前的对象指向当前的对象public void ShowInfo() Console.WriteLine(this.StuNo); Console.WriteLine(this.StuName); Console.WriteLine(this.StuSex); 显示当前对象对应的成员变量,这里显示当前对象对应的成员变量,这里this也可省略不写!但构造函数也可省略不写!但构造函数中的中的this不可省略

6、,否则编译器报错!不可省略,否则编译器报错!public class Studentprivate string StuNo;private string StuName;private string StuSex;public void InputInfo()public void ShowInfo()public static void Main() Student Tom = new Student(); Tom.InputInfo(); Tom.ShowInfo(); 注意:注意:C#中提供了默认的不带参数的中提供了默认的不带参数的构造函数,如果用户不写该函数,则编构造函数,如果用户不

7、写该函数,则编译器为用户默默的创建!一个类中可以译器为用户默默的创建!一个类中可以有有多个构造函数多个构造函数!public Student()仿照仿照Student类创建类创建Teacher类,类, Teacher类中包含成员类中包含成员变量变量teaNo(工号工号),teaName(教师姓名教师姓名),teaAge(年龄年龄),teaTitle(职称职称)及构造函数和及构造函数和GetInformation()(获取获取教师基本信息教师基本信息)。最后在。最后在Main()函数中创建()函数中创建Teacher类对类对象象Jane,并访问成员变量及成员函数。,并访问成员变量及成员函数。用于

8、执行清除操作的特殊方法。用于执行清除操作的特殊方法。析构函数不能有参数,一个类中只能有一个析构函数。析构函数不能有参数,一个类中只能有一个析构函数。析构函数用户销毁内存中已创建的对象。析构函数用户销毁内存中已创建的对象。析构函数的名字与包含它的类的名字同名,前面加析构函数的名字与包含它的类的名字同名,前面加,并且,并且不定义返回值类型,即使不定义返回值类型,即使void也不可以。也不可以。1. 类中可以不写析构函数,编译器会自动创建,并在释放对象类中可以不写析构函数,编译器会自动创建,并在释放对象时自动调用。时自动调用。示例:示例:Student()假设学生的学号,姓名已知,由于学生尚未报道,

9、对于学生的假设学生的学号,姓名已知,由于学生尚未报道,对于学生的性别未知,现希望当性别未知时,性别取默认值性别未知,现希望当性别未知时,性别取默认值“M”,性别已,性别已知,则通过构造函数赋值给相应的对象。构造函数如何写?知,则通过构造函数赋值给相应的对象。构造函数如何写?解决方案:解决方案:public Student()/默认构造函数默认构造函数public Student(string StuNo,string StuName)this.StuNo = StuNo;this.StuName = StuName;this.StuSex = “M”; public Student(strin

10、g StuNo,string StuName, string StuSex)this.StuNo = StuNo;this.StuName = StuName;this.StuSex = StuSex; public static void Main()Student Tom = new Student(“A001”,“Tom”,”M”); Student Jane = new Student(“A002”,”Jane”);同一个类中,如果函数同名,参数列表不同,则称同一个类中,如果函数同名,参数列表不同,则称为函数的重载。一个类中不同的构造函数组成,称为函数的重载。一个类中不同的构造函数组成

11、,称为构造函数重载!为构造函数重载!有有Time类如下:类如下: Time t1, t2, t3, t4 ; t1= new Time (); t2 = new Time(8);t3 = new Time(8, 30);t4 = new Time(8,30,30);类中还有类中还有ShowTime方法用来显示当方法用来显示当前时间为前时间为小时小时Y分分Z秒,请根据要求实现秒,请根据要求实现Time类。类。public class Time int hour, minute, second; public Time ( ) this.hour=this.minute=this.second=0

12、; public Time (int hour) this.hour=hour; this.minute=this.second=0; public Time (int hour, int minute) this.hour=hour; this.minute=minute; this.second=0; public Time (int hour, int minute, int second) this.hour=hour;this.minute=minute;this.second=second; public void ShowTime() Console.WriteLine(“当前时

13、间为当前时间为0时时1分分2秒秒”,hour,minute,second); 类中的成员要么是类中的成员要么是静态静态,要么,要么是非静态是非静态的。的。将类中的某个成员声明为将类中的某个成员声明为static,该成员称为静态成员。,该成员称为静态成员。类的非静态成员属于类的实例所有类的非静态成员属于类的实例所有每创建一个类的实例,都在内存中为非静态成员开辟了每创建一个类的实例,都在内存中为非静态成员开辟了一块存储区域;一块存储区域;用实例访问,形式:实例名用实例访问,形式:实例名.非静态成员非静态成员而类的静态成员属于类所有而类的静态成员属于类所有无论这个类创建了多少个实例,一个静态成员在内

14、存中无论这个类创建了多少个实例,一个静态成员在内存中只占有一块区域,为这个类的所有实例所共享。只占有一块区域,为这个类的所有实例所共享。用类访问,形式:类名用类访问,形式:类名.静态成员静态成员 类的静态方法只能直接访问类的静态成员!类的静态方法只能直接访问类的静态成员!对于学生类示例,想要得到所有学生人数的信息,该如何获取呢?很显然,对于学生类示例,想要得到所有学生人数的信息,该如何获取呢?很显然,这不是某个具体学生张三、李四的属性,而是整个学生群体的属性,对于这不是某个具体学生张三、李四的属性,而是整个学生群体的属性,对于这种情况,可以说这种情况,可以说这种属性是类的属性,而非其对象的属性

15、这种属性是类的属性,而非其对象的属性。在面向对象中,类的属性称之为在面向对象中,类的属性称之为静态属性静态属性。C#中使用中使用static关键字来定义静态属性或方法,静态属性不能用实例化关键字来定义静态属性或方法,静态属性不能用实例化对象引用,只能用类引用。若属性是静态的,通过对象引用,只能用类引用。若属性是静态的,通过“类名类名.属性属性”访问;访问;若属性是非静态的,则是通过若属性是非静态的,则是通过“对象名对象名.属性属性”访问。访问。思考:思考:项目中什么时候会用到静态成员?项目中什么时候会用到静态成员?解决方案:解决方案:网站中的当前在线人数,访问次数等;网站中的当前在线人数,访问

16、次数等;访问数据库的方法;访问数据库的方法;class MyClass public int a; static public int b; void Fun1() /定义一个非静态方法定义一个非静态方法 a = 10;/正确,直接访问非静态方法正确,直接访问非静态方法 b = 20;/正确,直接访问静态方法正确,直接访问静态方法 static void Fun2()/定义一个静态方法定义一个静态方法 a = 10;/错误,不能访问非静态成员错误,不能访问非静态成员 b = 20;/正确,可以访问静态成员正确,可以访问静态成员 public static void Main()MyClass

17、clsA = new MyClass(); clsA.a = 10;/正确正确 clsA.b = 20;/错误错误MyClass.a = 30;/错误错误 MyClass.b = 40;/正确正确 用户自定义类访问规则:用户自定义类访问规则:1.静态方法只能访问静态成员变量静态方法只能访问静态成员变量2.非静态方法即可访问静态成员变量又可访问非静态成员变量非静态方法即可访问静态成员变量又可访问非静态成员变量3.静态方法或静态成员变量通过类名访问静态方法或静态成员变量通过类名访问4.非静态方法或非静态成员变量通过实例名称来访问非静态方法或非静态成员变量通过实例名称来访问Main函数为什么是函数为

18、什么是static? 在程序刚开始运行的时候,在程序刚开始运行的时候,Main函数是程序的入口,此时函数是程序的入口,此时未建立任何实例,因此无法调用实例成员,为了能够在程序的未建立任何实例,因此无法调用实例成员,为了能够在程序的开始执行开始执行Main方法,必须将其声明为静态。要是方法,必须将其声明为静态。要是main也要实例也要实例化的话,那谁又来实例化化的话,那谁又来实例化main呢?呢? 设计学生类,其中包含学号,姓名,年龄及学生总人数共设计学生类,其中包含学号,姓名,年龄及学生总人数共4个属性,方个属性,方法有法有Student()()(构造函数构造函数),SetNumber(),(

19、),GetStudent(),GetNumber()。(1)以上属性和方法中哪些是非静态数据,哪些是静态数据?以上属性和方法中哪些是非静态数据,哪些是静态数据?(2)设计程序实现该类。设计程序实现该类。public class Student int stuId; string stuName; int stuAge; static int stuNum = 0; public Student(int stuId,string stuName,int stuAge) this.stuId = stuId; this.stuName = stuName; this.stuAge = stuAge

20、; public static void setNumber() stuNum+; public void GetStudent() Console.WriteLine(stuId); Console.WriteLine(stuName); Console.WriteLine(stuAge); public static void GetNumber() Console.WriteLine(stuNum); public static void Main()Student s1,s2;s1 = new Student(100, mary, 21);Student.setNumber(); s1

21、.GetStudent();Student.GetNumber(); s2 = new Student(101, tom, 22); Student.setNumber(); s2.GetStudent();Student.GetNumber(); 输入输出信息输入输出信息较为复杂,如较为复杂,如何简化?何简化?public class Student int stuId; string stuName; int stuAge; static int stuNum = 0; public Student(int stuId,string stuName,int stuAge) this.stuId = stuId; this.stuName = stuName; this.stuAge = stuAge; stuNum+; public void GetStudent Console.WriteLine(stuId); Console.WriteLine(stuName); Console.WriteLine(stuAge); Console.WriteLine(stuNum); public static void Main()Student s1,s2;s1 = new Student(100, mary, 21); s

温馨提示

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

评论

0/150

提交评论