C#类的构造方法this方法重载析构方法Word格式.docx

上传人:b****2 文档编号:4994263 上传时间:2023-05-04 格式:DOCX 页数:14 大小:25.25KB
下载 相关 举报
C#类的构造方法this方法重载析构方法Word格式.docx_第1页
第1页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第2页
第2页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第3页
第3页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第4页
第4页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第5页
第5页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第6页
第6页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第7页
第7页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第8页
第8页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第9页
第9页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第10页
第10页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第11页
第11页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第12页
第12页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第13页
第13页 / 共14页
C#类的构造方法this方法重载析构方法Word格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C#类的构造方法this方法重载析构方法Word格式.docx

《C#类的构造方法this方法重载析构方法Word格式.docx》由会员分享,可在线阅读,更多相关《C#类的构造方法this方法重载析构方法Word格式.docx(14页珍藏版)》请在冰点文库上搜索。

C#类的构造方法this方法重载析构方法Word格式.docx

_M

/*观察字段成员如果不赋初值时,在创建对象的时候,ITPUB个人空间O.a__^_m_g

u"

B"

p

*编译器会按照类型默认的给变量一个初值,如年龄、姓名ITPUB个人空间_M_a_^_w'

Q

*我们可以在构造方法中,对未赋值的字段进行改变,如年龄ITPUB个人空间6S_m_f_f4a_V5d

*如果字段已经赋初值了,那么创建对象的时候,

_f#XG9s_n4S0 

*就会使用初值,如果需要改变,就在构造方法中重新赋值即可,如性别*/

//定义一个年龄变量,不赋初值ITPUB个人空间_L0Q_E4d_e_u_M'

t$Q

intage;

ITPUB个人空间p"

Q9D_Q_{0f_B_?

//定义一个姓名变量,不赋初值ITPUB个人空间~"

t_n_?

_xJ9{_\0B'

n

stringname;

ITPUB个人空间mP_X9v_Oh%p

//定义一个性别变量,赋初值为男

^_M_t_o.u0 

stringSex="

男"

;

//定义一个方法,读取类中字段成员,值的变化。

ITPUB个人空间9L_M-M_p@&

t_O7@['

u#`

voidSay()

'

[lU_F_i#f_Qd0 

{

0N_f`2V_|)a_H0 

Console.WriteLine("

我的年龄:

{0},我的名字:

{1},我的性别:

{2}"

age,name,Sex);

ITPUB个人空间_z.g0\e_O_L_}_C_v

}

2PE_c_d&

a;

Z1D-X1~0 

/*1.以下方法都为Ren这个类的构造方法,他们因为参数不同,形成了方法的重载,

_?

dH_c_\_C7t_m0 

*2.this关键字:

this关键字用来引用对象本身,已经是说,this.name指的是对象中的name字段,ITPUB个人空间a2J([2^_[_ws

而=name的这个name指的是方法中离它定义最近的name,这里值的是构造方法中传入的name参数

"

U_w"

x_^]

x.O0 

*this关键字在例子结束后,还会具体的讲解。

*/ 

_Z;

L7u0~'

n6D_P+B_`0 

ITPUB个人空间,o6r_K8g_u,X,r.C(|

//在无参的构造方法中,给性别重新赋值,年龄和姓名按照创建对象时默认的赋初值

$C_}&

^_Q#m#B_}:

F_q_R0 

publicRen()

5M5Ny*t-i2C_H0 

{ITPUB个人空间_@&

~0B_f_O8|9m_{

//改变性别的值ITPUB个人空间-jD%g_p*M_E

Sex="

女"

ITPUB个人空间6O_^9i#M_n,@1x9@

我刚出生!

还没有名字,年龄也从0岁开始!

);

ITPUB个人空间5k#_#w_z)D/S_T#p_j

//此时读取对象中的字段值的变化,应该性别改变,年龄和姓名都为默认值

8X]_I.S_f_]+g_x0 

Say();

_y.P_M_D)D_~0 

}ITPUB个人空间_T_yTFD)g(E_s7L

ITPUB个人空间_h_q3H#C_\3f

//创建一个带姓名参数的构造方法,将创建对象时传入的name参数赋给对象中的字段name值,这样say方法中的姓名也有了改变ITPUB个人空间6{_R*E_]_

//同时在这个构造方法中,给age字段自定义赋值。

ITPUB个人空间/H_O9P(e*|,T2}*}

publicRen(stringname)ITPUB个人空间/J8JO)J7\_|:

h1g_z_H

?

_R4Z_e_~;

D.fP7r0 

this.name=name;

ITPUB个人空间+I3D"

K*v_G_@l_[0`

呦!

我使用双截棍,我有名字了!

,但是年龄呢?

我自己定,我就27岁了。

_p_A_F'

B_R3P'

G0 

age=27;

AS1xu"

n_a_K0 

5Z!

o_o!

s_f[&

n0 

//创建一个带姓名参数、姓名的构造方法,将创建对象时传入的name参数赋给对象中的字段name值,ITPUB个人空间_fT(S_h%n$T_Y5m8@$[

//将创建对象时传入的age参数的值赋给对象中的字段age,这样say方法中的姓名、年邻都有了改变

q4A_~_?

_H!

w(z0 

_](V"

m_]1uW6H_u0 

publicRen(intage,stringname)ITPUB个人空间_~_x-T_\;

ek_H

{ITPUB个人空间8E_g;

A_l

W_t_R

this.age=age;

_~_Q_r_g_]5g_X_m-Xg0 

this.name=name;

ITPUB个人空间9d7|_}_x_m_F@W4N_H

哦!

你给我起名字,告诉我多大了吧!

你说的算!

|_G)Q_m'

|0 

ITPUB个人空间_c_tqi:

y-P$n_i

//定义静态的构造函数,我把她放在在最后,但是会第一个被调用。

ITPUB个人空间_l2O+G$~_C3@V

staticRen()

_r"

h/~8q)E9v$\#b%u0 

o_L2x0F_U0 

我是静态的构造函数,不能有参数及访问修饰符,并且创建对象时,我只执行一次,最先调用"

ITPUB个人空间_H9j2d_ZV_}

Console.WriteLine();

ITPUB个人空间

n_|H#Ix7u_{

_F'

b$@+YN;

}%x_Z_o!

5N0 

ITPUB个人空间UFFw_j1D

_@_n_{!

x&

_Y"

~0 

classProgramITPUB个人空间_S_k%e_R_}!

]_i+T_W1_4d

{ITPUB个人空间_X_B_k^*`_aj)G*B_S

staticvoidMain(string[]args)ITPUB个人空间6a_v,o7`_O2d_?

{ITPUB个人空间_K_}:

5K.{2F_W

//创建无参的对象boby,并且创建时会先调用静态的构造方法,再调用无参的构造方法

_m8}%L_T_b0 

Renboby=newRen();

_c$p_yFC_v0 

//创建有姓名参数的对象songer歌手

%RV_m_X_U5Ag0 

Rensonger=newRen("

周杰伦"

ITPUB个人空间;

j6D!

}_|_U+C2`+_

//创建有年龄、姓名参数的对象manITPUB个人空间(V%]9t&

F_|*a+|5hY$n_Y

Renman=newRen(33,"

贝克汉姆"

Z#l_?

_m4P(A6R0 

_r-b_dg{0b0 

2@%x(g_p/G0}ITPUB个人空间_M_RX,D(w

运行结果:

我是静态的构造函数,不能有参数及访问修饰符,并且创建对象时,我只执行一次,最先调用

ITPUB个人空间_@_C_e_g)v.z

0,我的名字:

,我的性别:

ITPUB个人空间6Ybk_s_@!

\_`

27,我的名字:

周杰伦,我的性别:

ITPUB个人空间/rf$w_r[l_G:

i

33,我的名字:

贝克汉姆,我的性别:

通过上面的实例和注释,对照运行结果,同学们要熟练的运用和理解,因为我们现在还没有学习到继承,其实在一个类创建成对象的时候,创建时,编译器会先看这个类是否有父类,如果有父类,再继续找是否有父类的父类,我习惯叫爷爷类,如果有爷爷类,再看有没有太爷爷类,如果没有太爷爷类,就会先执行爷爷类的构造方法,再执行爸爸类的构造方法,最后才执行自己的构造方法,当然所有的构造方法的继承都是指实例构造函数,静态的构造函数是无法被继承的。

下面的实例就是一个构造方法的继承顺序,现在看不懂没有关系,只是想让大家了解创建对象的工作过程,这里提前讲一个知识点就是继承的语法如A是父类,B是子类,那么在定义B类的时候,语法是这样写的ClassB:

A,用“:

”来表明继承关系,在java中是用“extends”关键字,现在看看代码,理解一下结果:

构造方法在继承中的顺序

_A1k;

]a_{&

G_M0classClass1 

可以看出,类在继承时,构造函数在实例化的过程中,是会被再次调用的。

ITPUB个人空间a"

A1K_`_y"

t

{ITPUB个人空间%H_]c2o2C_K'

d

staticvoidMain()ITPUB个人空间5}/y_z_E_^2f_d_B_K

(q-s8O5s_A_?

/g(e0 

**********"

p!

v!

Tge;

}_|0 

Aa=newA();

_x%s_o_q_t

ITPUB个人空间2E_q_QS_]^F8\_o`

Bb=newB();

{2s_n2M_[)t-x0 

*****AC:

A*****"

ITPUB个人空间$T$n_I\_W!

Y(S)y_s

ACac=newAC();

_G#L__

F_H_M+j0 

*****BC:

B*****"

ITPUB个人空间K3K9`P_^+E{@_s

BCbc=newBC();

A_T_n_F_W4s6\_m0 

*****CC:

AC*****"

_R_h_a_|_]4D0 

CCcc=newCC();

ITPUB个人空间_h|$a_?

1V_?

/d

*****CCC:

BC*****"

dg_r(`:

S(y;

CCCccc=newCCC();

_A_^_c/p)d8i;

iL!

V0 

}ITPUB个人空间_B+n_s

F*@:

i/Y9S$M_v

}ITPUB个人空间_I_A_w)b_c_u_g_c_r/p

classAITPUB个人空间_P_f2@(V,GX

*l_b_J,nZ4R8T0 

publicA()ITPUB个人空间_G0[#x:

m_K+M_qA%{

$G-B;

S3Z_l$K$o_k0 

CallmethodA()"

~

u:

Z(^'

f_PU-B0 

6J2h*B)N_P0 

_X)?

-n9~_T,D_b;

o_q0 

classBITPUB个人空间a_D&

|;

_6P

9p_Q_V+|~_B_]_y0 

publicB()

R_L_~'

j%|0 

{ITPUB个人空间.]|5q4j_L_E

CallmethodB()"

ITPUB个人空间_V_d_Pg2[4S0W_`/K9I

_j_^,u_U3V0 

}ITPUB个人空间0L2{1`4d_L_L;

}5Z_B6g

classAC:

AITPUB个人空间ox2n`DXi9f_[6C

{ITPUB个人空间2Zo_~&

]J

publicAC()

9N.O}_l;

E_}0 

_c&

[;

i[6p8o8|0 

CallmethodAC()"

ITPUB个人空间+g/u_G_k_C_E_`@

I_~3i_P_e_G:

a'

M]0 

}ITPUB个人空间_Nes+b8m2F_pq

classBC:

B

_uvSM_H1s0 

{ITPUB个人空间"

d_N8I5r_g_^7__i

publicBC()

G_C_G_k_c_n0 

{ITPUB个人空间+T0WJ4~-I_D,V5][U

CallmethodBC()"

ITPUB个人空间3X3s%jwT_T7I:

DG`

:

h1CO_h_V;

I_D_m_A0 

y0{_R(q_h'

p_w0 

classCC:

AC

_Wy$nm_N0 

{ITPUB个人空间/P%e{_w_K:

d3z

publicCC()ITPUB个人空间+Z_|*D5C/B_D'

o

{ITPUB个人空间0B:

t_j7E)B

CallmethodCC()"

b_g9~_f_p_l_Nh7g4I0 

_R_R&

[:

a7}_\"

J_D)M!

Q0 

q_E#R"

n_BO2L_~_g_d_O0 

classCCC:

BCITPUB个人空间_^3b0lC_a_C_`w_@%A

{ITPUB个人空间9e}h%N

N0A|

publicCCC()ITPUB个人空间2K_Kx_P5r(M

{ITPUB个人空间:

VM0__Am_S5P

CallmethodCCC()"

_v3b_O_^0R_`5O_}_u#L_v5D0 

结果如下:

**********

)^;

}!

|6I"

X_M0CallmethodA()

3~_^*m_A6q_X_s_l*X0**********ITPUB个人空间/E_|_M_|0h9t

CallmethodB()ITPUB个人空间*q6a_R_E8a

A*****ITPUB个人空间_m_Ok_z4y9P

CallmethodA()

_T_s_p_G_]K0]_E:

h3u0CallmethodAC()

_Mw_q_e_zFW_m0*****BC:

B*****ITPUB个人空间4M_Pbt___a0y#L

CallmethodB()

v_s_c3X_k2u_{0CallmethodBC()

_i4g_A_Z_h_I+[w0*****CC:

AC*****ITPUB个人空间_k_[1gd9[-R_D_t_I

CallmethodA()ITPUB个人空间!

z*u_p_VS#f

CallmethodAC()

}_hi_D_e/q8|0CallmethodCC()ITPUB个人空间'

L_@_h4^h_r

H_cU&

r-?

BC*****ITPUB个人空间_~_x2I$r6pM_W

CallmethodB()ITPUB个人空间@&

i3FE_G_S

CallmethodBC()ITPUB个人空间p_Q,k_C2O_G_d

CallmethodCCC()

K_J/gS&

g:

M'

i_]3a0请按任意键继续...

虽然我没有写注释,但是相信同学们都应该能理解这个过程,构造器的继承我也会在类七中再继续深化讲解。

构造方法的出现使得我们开发人员可设置默认值、限制实例化以及编写更加灵活且便于阅读的代码。

下面我们来说说this关键字,this关键字最大的用途就是用来区分类级别的变量和局部变量,当一个位于方法内部的局部变量与类级别的变量名称相同的时候,因为有效区域不同,因为并不不会发生冲突,但是如此一来,在方法内部所访问的变量,一定是其中所定义的局部变量,而非类级别的同名变量,在这种情况下,我们就使用this关键字,比如第一个实例中,用this代表对象本身,this.name指的是类级别中定义的name字段.使用this虽然可以让我们分辨出不同级别的变量,但是最好还是起不同的名字来区分变量。

接下来我们来学习本节课最后一个知识点,析构方法。

析构方法

R_D_^_^

d4F_y)}-a5O0--------------------------------------------------------------------------------

析构方法也叫销毁方法,也有人称为析构器,类借助构造方法进行对象的初始化,借助析构方法进行对象的终止操作,析构方法也是使用类名相同的名称命名,用“~”修饰,当对象被系统终止并且回收时,析构方法执行,我们可以在析构方法中写方法,它会最后被执行,析构方法的语法书写如:

~ClassName(){},析构函数是不能有参的,并

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2