C#类的构造方法、析构方法

上传人:桔**** 文档编号:439302702 上传时间:2022-12-18 格式:DOCX 页数:14 大小:17.26KB
返回 下载 相关 举报
C#类的构造方法、析构方法_第1页
第1页 / 共14页
C#类的构造方法、析构方法_第2页
第2页 / 共14页
C#类的构造方法、析构方法_第3页
第3页 / 共14页
C#类的构造方法、析构方法_第4页
第4页 / 共14页
C#类的构造方法、析构方法_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《C#类的构造方法、析构方法》由会员分享,可在线阅读,更多相关《C#类的构造方法、析构方法(14页珍藏版)》请在金锄头文库上搜索。

1、今天这节课我们来学习类的构造方法和析构方法,同学们现在回忆一下在类一系 列中,学习到创建一个类ClassName的实例,也就是对象ObjName时基本语法为: ClassName bjName二new ClassName();我说过,new 后面的 ClasName()实际上 指的是这个类的构造方法,而且我也说过,这个()中可以有参数,这个有参数, 就是指构造方法可以有参数,那么什么是类的构造方法呢?构造方法构造方法又叫构造函数,也有人叫做构造器,其实就是对类进行初始 化。构造方法是一种特殊的方法,在类实例创建之前执行,用来初始化对象,完 成对象创建前所需的相关设定,构造方法允许将类实例初始为

2、有效状态的特殊方 法,这就是构造方法的定义,用通俗的话说,就是开车前的暖车工作,用洗衣机 之前的接上电源的工作,参数可以有多个可以这样理解,洗衣机的插头有两头的、 有三项的,在创建洗衣机对象的时候,要分清插头的种类,才能创建成功对象。为什么说构造方法是特殊的方法呢?因为构造方法本身没有返回值,并 且通常是public访问类型,方法的名称必须与类名相同,当我们没有明确的在 类中定义构造方法的时候,例如我们以前所定义的类,都是没有定义构造方法的, 这时系统会使用默认的构造方法,如创建ClassName类的默认构造方法,public ClassName()。默认的构造方法并没有进行任何类初始化行为,

3、你可以自己 定义构造方法,当然如果你有自定义构造方法,那么默认的构造方法就会失效了。 也就是说,当我们在ClassName类中没有定义构造方法时,C#语言会生成一个空 的构造方法ClassName(),当然这个空的方法是什么也没做,只是为了让我们 定义的类能够在创建对象时顺利的实例化而已。构造方法可以有两个,因为参数的不同区别开,这就构成了方法的重 载,方法重载的最大的好处在与可以利用相同的名称来组织应用程序的方法成 员,当一个复杂的类被创建的时候,对功能相同的方法最好采用相同的命名方式, 用不同的参数来区别,比如,计算面积时,我们就可以把四边形面积的计算方法 的名字起同一个,用参数来区别如正

4、方形定义一个参数(一个边长),长方形定 义三个参数(一个长,一个宽,另一个长方形的标志如0),梯形定义三个参数 (一个底,一个高,另一个梯形的标志如1),通过第三个参数标志区别长方形 和梯形不同的面积公式。方法的重载要注意的是,方法名相同,但是参数类型或 个数必须要有所不同,方法重载的优点就是可以在不改变原方法的基础上,新增 功能。构造方法的重载中还包括一种,在方法的名字前的修饰符只有 static,称为静态构造方法,使用静态构造方法要注意以下几点:1. 静态构造方法只有一个;2. 并且没有参数;3在所有的构造方法中最先被执行;4. 静态的构造方法不会被继承;5. 静态构造方法在所有静态成员本

5、初始化后执行,也就是说如果在类中定义了静 态成员,就会自动生成一个静态构造方法,否则如果要使用静态构造方法就得自 定义。6. 静态构造方法在所有静态成员被引用之前执行。7. 静态构造方法在所有实例成员被分配之前执行。下面我们来看实例,通过实例我们来体会构造方法是如何在创建对象时初 始化的。构造方法实例namespace hello(/创建一个人类Renclass Ren(/*观察字段成员如果不赋初值时,在创建对象的时候,*编译器会按照类型默认的给变量一个初值,如年龄、姓名*我们可以在构造方法中,对未赋值的字段进行改变,如年龄*如果字段已经赋初值了,那么创建对象的时候,*就会使用初值,如果需要改

6、变,就在构造方法中重新赋值即可,如性别*/定义一个年龄变量,不赋初值int age;定义一个姓名变量,不赋初值string name;定义一个性别变量,赋初值为男string Sex = 男;/定义一个方法,读取类中字段成员,值的变化。void Say()(Console.WriteLine(我的年龄:0,我的名字: 1,我的性 别:2”, age, name,Sex );/*1.以下方法都为Ren这个类的构造方法,他们因为参数不同,形成了 方法的重载,* 2.this关键字:this关键字用来引用对象本身,已经是说,this.name 指的是对象中的name字段,* 而二name的这个nam

7、e指的是方法中离它定义最近的name,这里值 的是构造方法中传入的name参数* this关键字在例子结束后,还会具体的讲解。*/在无参的构造方法中,给性别重新赋值,年龄和姓名按照创建对象时 默认的赋初值public Ren()/改变性别的值Sex = 女;Console.WriteLine(我刚出生!还没有名字,年龄也从0岁开始!);/此时读取对象中的字段值的变化,应该性别改变,年龄和姓名都为默认值Say();创建一个带姓名参数的构造方法,将创建对象时传入的name参数赋 给对象中的字段name值,这样say方法中的姓名也有了改变同时在这个构造方法中,给age字段自定义赋值。public R

8、en( string name )(this. name =name ;Console.WriteLine( 呦!我使用双截棍,我有名字了!,但是年龄 呢?,我自己定,我就27岁了。);age = 27;Say();/创建一个带姓名参数、姓名的构造方法,将创建对象时传入的name 参数赋给对象中的字段name值,将创建对象时传入的age参数的值赋给对象中的字段age,这样say 方法中的姓名、年邻都有了改变public Ren(int age, string name)(this.age = age;this.name = name;Console.WriteLine( 哦!你给我起名字,告诉

9、我多大了吧!你说 的算!);Say();/定义静态的构造函数,我把她放在在最后,但是会第一个被调用。static Ren()Console.WriteLine(我是静态的构造函数,不能有参数及访问修饰符,并且创建对象时,我只执行一次,最先调用); Console.WriteLine();class Program(static void Main(string args)(创建无参的对象boby,并且创建时会先调用静态的构造方法,再调用无参的构造方法Ren boby = new Ren();Console.WriteLine();创建有姓名参数的对象songer歌手Ren songer = n

10、ew Ren(周杰伦”);Console.WriteLine();创建有年龄、姓名参数的对象manRen man = new Ren(33,贝克汉姆”);Console.WriteLine();运行结果:我是静态的构造函数,不能有参数及访问修饰符,并且创建对象时,我只执行一 次,最先调用我刚出生!还没有名字,年龄也从0岁开始!我的年龄:0,我的名字:,我的性别:女呦!我使用双截棍,我有名字了!,但是年龄呢?,我自己定,我就27岁了。我的年龄:27,我的名字:周杰伦,我的性别:男哦!你给我起名字,告诉我多大了吧!你说的算!我的年龄:33,我的名字:贝克汉姆,我的性别:男通过上面的实例和注释,对照

11、运行结果,同学们要熟练的运用和理解, 因为我们现在还没有学习到继承,其实在一个类创建成对象的时候,创建时,编 译器会先看这个类是否有父类,如果有父类,再继续找是否有父类的父类,我习 惯叫爷爷类,如果有爷爷类,再看有没有太爷爷类,如果没有太爷爷类,就会先 执行爷爷类的构造方法,再执行爸爸类的构造方法,最后才执行自己的构造方法, 当然所有的构造方法的继承都是指实例构造函数,静态的构造函数是无法被继承 的。下面的实例就是一个构造方法的继承顺序,现在看不懂没有关系,只是想让 大家了解创建对象的工作过程,这里提前讲一个知识点就是继承的语法如A是父 类,B是子类,那么在定义B类的时候,语法是这样写的Cla

12、ss B: A,用“:” 来表明继承关系,在java中是用“extends”关键字,现在看看代码,理解一下 结果:构造方法在继承中的顺序class Classi可以看出,类在继承时,构造函数在实例化的过程中,是会被再次调用的。(static void Main()(Console.WriteLine(*);A a = new A();Console.WriteLine(*);B b = new B();Console.WriteLine(* AC : A*);AC ac = new AC();Console.WriteLine(*BC : B*); BC bc = new BC();Conso

13、le.WriteLine(*CC : AC*);CC cc = new CC();Console.WriteLine(*CCC : BC*);CCC ccc = new CCC();class A(public A()(Console.WriteLine(Call method A();class B(public B()(Console.WriteLine(Call method B();class AC : A(public AC()(Console.WriteLine(Call method AC();class BC : B(public BC()(Console.WriteLine(

14、Call method BC();class CC : AC(public CC()(Console.WriteLine(Call method CC();class CCC : BC(public CCC()(Console.WriteLine(Call method CCC();结果如下:*Call method A()*Call method B()* AC : A*Call method A()Call method AC()*BC : B*Call method B()Call method BC()*CC : AC*Call method A()Call method AC() Call method CC() *CCC : BC* Call method B() Call method BC() Call method CCC() 请按任意键继续.虽然我没有写注释,但是相信同学们都应该能理解这个过程,构造器的继承 我也会在类七中再继续深化讲解。构造方法的出现使得我们开发人员可设置默认 值、限制实例化以及编写更加灵活且便于阅读的代码。下面我们来说说this关 键字,this关键字最大的用途就是用来区分类级别的变量和局部变量,当一个 位于方法内部的局部变量与类级别的变量名称相

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号