-
對象和類的關(guān)系
查看全部 -
1、封裝
2、繼承
3、多態(tài)
查看全部 -
在同一個類中,多個方法,名字相同,但參數(shù)不同,叫做方法的重載,
查看全部 -
對私有屬性private進行封裝
查看全部 -
封裝的快捷鍵 Ctrl+R+E
選中需要封裝的對象選中按快捷鍵。
查看全部 -
封裝 CTRL+R+E?
查看全部 -
封裝的概念:隱藏對象的信息,留出訪問的接口
關(guān)于封裝:
類和對象;把字段封裝成屬性;方法;構(gòu)造方法;值類型與引用類型
引用:結(jié)構(gòu) 枚舉 out ref
查看全部 -
ref起到傳參作用:
out是獲取結(jié)果且可以返回多個值;return返回一個值。
使用Out 修飾形參必須得給形參賦值
查看全部 -
使用ref關(guān)鍵字可以使用值類型變量的引用,相當(dāng)于C語言中的&(取地址)。
ref需要在形參前面使用,包括調(diào)用的時候;另外屬性不能作為實參使用。
查看全部 -
//按引用傳遞參數(shù),方法修改形參,通常實參也會被修改
//按值傳遞參數(shù),方法修改形參,實參不會被修改查看全部 -
枚舉:
1、值類型
2、不能定義字段屬性和方法
3、枚舉值是從0遞增的整數(shù)
例子:enum Gender
{
男,女
}
男等同整型的0,女等同整型的1
查看全部 -
簡單來說,struct是值類型,創(chuàng)建一個struct類型的實例被分配在棧上。class是引用類型,創(chuàng)建一個class類型實例被分配在托管堆上。但struct和class的區(qū)別遠不止這么簡單。 概括來講,struct和class的不同體現(xiàn)在: ●?類是引用類型,struct是值類型 ●?在托管堆上創(chuàng)建類的實例,在棧上創(chuàng)建struct實例 ●?類實例的賦值,賦的是引用地址,struct實例的賦值,賦的是值 ●?類作為參數(shù)類型傳遞,傳遞的是引用地址,struct作為參數(shù)類型傳遞,傳遞的是值 ●?類沒有默認無參構(gòu)造函數(shù),struct有默認無參構(gòu)造函數(shù) ●?類支持繼承,struct不支持繼承 ●?類偏向于"面向?qū)ο?,用于復(fù)雜、大型數(shù)據(jù),struct偏向于"簡單值",比如小于16字節(jié),結(jié)構(gòu)簡單 ●?類的成員很容易賦初值,很難給struct類型成員賦初值 ●?類的實例只能通過new?someclass()來創(chuàng)建,struct類型的實例既可以通過new?somestruct()來創(chuàng)建,也可以通過somestruct?mystruct;來創(chuàng)建 一、從賦值的角度體驗struct和class的不同 引用類型賦值,是把地址賦值給了變量 class?program ??{ ????static?void?main(string[]?args) ????{ ??????sizeclass?sizeclass?=?new?sizeclass(){width?=?10,?length?=?10}; ??????console.writeline("賦值前:width={0},length={1}",?sizeclass.width,?sizeclass.length); ? ??????var?copyofsizeclass?=?sizeclass; ??????copyofsizeclass.length?=?5; ??????copyofsizeclass.width?=?5; ??????console.writeline("賦值后:width={0},length={1}",sizeclass.width,?sizeclass.length); ??????console.readkey(); ????} ??} ? ??public?class?sizeclass ??{ ????public?int?width?{?get;?set;?} ????public?int?length?{?get;?set;?} ??} ? ??public?struct?sizestruct ??{ ????public?int?width?{?get;?set;?} ????public?int?length?{?get;?set;?} ??} 運行結(jié)果如下圖所示:以上,當(dāng)把sizeclass賦值給copyofsize變量的時候,是把sizeclass所指向的地址賦值給了copyofsize變量,2個變量同時指向同一個地址。所以,當(dāng)改變copyofsizeclass變量的值,也相當(dāng)于改變了sizeclass的值。 struct類型賦值,是完全拷貝,在棧上多了一個完全一樣的變量 class?program ??{ ????static?void?main(string[]?args) ????{ ??????sizestruct?sizestruct?=?new?sizestruct(){length?=?10,?width?=?10}; ??????console.writeline("賦值前:width={0},length={1}",?sizestruct.width,?sizestruct.length); ? ??????var?copyofsizestruct?=?sizestruct; ??????copyofsizestruct.length?=?5; ??????copyofsizestruct.width?=?5; ??????console.writeline("賦值后:width={0},length={1}",?sizestruct.width,?sizestruct.length); ??????console.readkey(); ????} ??} 程序運行結(jié)果如下圖所示:以上,當(dāng)把sizestruct賦值給copyofsizestruct變量的時候,是完全拷貝,改變copyofsizestruct的值不會影響到sizestruct。 二、從參數(shù)傳值角度體驗struct和class的不同 引用類型參數(shù)傳遞的是地址 class?program ??{ ????static?void?main(string[]?args) ????{ ??????listtemp?=?new?list(){"my","god"}; ??????temp.foreach(t?=>?console.write(t?+?"?")); ??????console.readkey(); ????} ? ????public?static?void?changereferencetype(listlist) ????{ ??????list?=?new?list(){"hello",?"world"}; ????} ??} ??? 運行結(jié)果:my?god 為什么不是hello?world? →棧上的temp指向托管堆上的一個集合實例 →當(dāng)temp放到changereferencetype(temp)方法中,本質(zhì)是把temp指向的地址賦值給了變量list →在changereferencetype(listlist)方法內(nèi)部,又把變量list的指向了另外一個集合實例地址 →但temp的指向地址一直沒有改變 我們再來改變changereferencetype(listlist)內(nèi)部實現(xiàn)方式,其它不變。 class?program ??{ ????static?void?main(string[]?args) ????{ ??????listtemp?=?new?list(){"my","god"};????? ??????changereferencetype(temp); ??????temp.foreach(t?=>?console.write(t?+?"?")); ??????console.readkey(); ????} ? ????public?static?void?changereferencetype(listlist) ????{ ??????list.clear(); ??????list.add("hello"); ??????list.add("world"); ????} ??} ??? 運行結(jié)果:hello?world 為什么不是my?god??? →棧上的temp指向托管堆上的一個集合實例 →當(dāng)temp放到changereferencetype(temp)方法中,本質(zhì)是把temp指向的地址賦值給了變量list →在changereferencetype(listlist)方法內(nèi)部,把temp和list共同指向的實例清空,又添加"hello"和"world"2個元素 →由于list和temp指向的實例是一樣的,所以改變list指向的實例就等同于改變temp指向的實例 以上,很好地說明了:引用類型參數(shù)傳遞的是地址。 值類型struct參數(shù)傳遞的是值 ??? class?program ??{ ????static?void?main(string[]?args) ????{ ??????size?s?=?new?size(){length?=?10,?width?=?10}; ??????changestructtype(s); ??????console.write("length={0},width={1}",?s.length,s.width); ??????console.readkey(); ????} ? ????public?static?void?changestructtype(size?size) ????{ ??????size.length?=?0; ??????size.width?=?0; ????} ??} ? ??public?struct?size ??{ ????public?int?length?{?get;?set;?} ????public?int?width?{?get;?set;?} ??}
查看全部 -
值類型:int/double/char/bool;
引用類型:類/引用/接口,string屬于類,所以也是引用類型,引用類型new的時候慧創(chuàng)建新的對象,=賦值僅僅是地址的副本。
值類型賦值慧創(chuàng)建值的副本(開辟新的內(nèi)存空間),修改某個副本,并不會影響其他副本的值;
而引用類型賦值創(chuàng)建的是內(nèi)存地址的副本(僅僅存儲地址而沒有開辟內(nèi)訓(xùn)空間),修改任何一個副本,也同時修改其他的副本。
查看全部 -
對象初始化器
查看全部 -
構(gòu)造方法的重載
查看全部
舉報