函數(shù)在成為類的成員之后,就被成為方法没咙。
方法永遠(yuǎn)都是類或者結(jié)構(gòu)體(用struct生成)的成員
結(jié)構(gòu)體跟類很相似猩谊,也能定義字段,方法和構(gòu)造函數(shù)祭刚,都能實(shí)例化對(duì)象预柒,但是數(shù)據(jù)存儲(chǔ)不同队塘。
struct Books{ public string title; public string author; public string subject; public int book_id;};
https://blog.csdn.net/Circle__Gossoon/article/details/52126583
這兩種數(shù)據(jù)類型的本質(zhì)區(qū)別主要是各自指向的內(nèi)存位置不同。傳遞類的時(shí)候宜鸯,主要表現(xiàn)為是否同時(shí)改變了源對(duì)象。
1.結(jié)構(gòu)體是值類型遮怜,類是引用類型
雖然結(jié)構(gòu)體的初始化也使用了new操作符淋袖,可是結(jié)構(gòu)體對(duì)象依然分配在堆棧上而不是堆上
? ? ? ? 類在傳遞的時(shí)候,傳遞的內(nèi)容是位于托管內(nèi)存中的位置锯梁,結(jié)構(gòu)體在傳遞的時(shí)候即碗,傳遞的內(nèi)容是位于程序堆棧區(qū)的內(nèi)容。當(dāng)類的傳遞對(duì)象修改時(shí)陌凳,將同時(shí)修改源對(duì)象剥懒,而結(jié)構(gòu)體的傳遞對(duì)象修改時(shí),不會(huì)對(duì)源對(duì)象產(chǎn)生影響合敦。
堆棧的執(zhí)行效率要比堆的執(zhí)行效率高初橘,可是堆棧的資源有限,不適合處理大的邏輯復(fù)雜的對(duì)象充岛。所以結(jié)構(gòu)處理作為基類型對(duì)待的小對(duì)象保檐,而類處理某個(gè)商業(yè)邏輯
因?yàn)榻Y(jié)構(gòu)是值類型所以結(jié)構(gòu)之間的賦值可以創(chuàng)建新的結(jié)構(gòu),而類是引用類型崔梗,類之間的賦值只是復(fù)制引用
注:?
a.雖然結(jié)構(gòu)與類的類型不一樣夜只,可是他們的基類型都是對(duì)象(object),c#中所有類型的基類型都是object?
? b.雖然結(jié)構(gòu)的初始化也使用了New 操作符可是結(jié)構(gòu)對(duì)象依然分配在堆棧上而不是堆上,如果不使用“新建”(new)蒜魄,那么在初始化所有字段之前扔亥,字段將保持未賦值狀態(tài),且對(duì)象不可用?
2.結(jié)構(gòu)體不能從另外一個(gè)結(jié)構(gòu)或者類繼承谈为,本身也不能被繼承旅挤,雖然結(jié)構(gòu)沒有明確的用sealed聲明,可是結(jié)構(gòu)是隱式的sealed
類完全可擴(kuò)展的峦阁,除非顯示的聲明sealed 否則類可以繼承其他類和接口谦铃,自身也能被繼承
雖然結(jié)構(gòu)不能被繼承,可是結(jié)構(gòu)能夠繼承接口榔昔,方法和類繼承接口一樣
3.結(jié)構(gòu):不能包含顯式默認(rèn)構(gòu)造函數(shù)驹闰;沒有析構(gòu)函數(shù),沒有abstract和sealed(因?yàn)椴荒芾^承)撒会;不能有protected修飾符嘹朗,可以不使用new初始化
在結(jié)構(gòu)中初始化實(shí)例字段是錯(cuò)誤的
類: 有默認(rèn)的構(gòu)造函數(shù),有析構(gòu)函數(shù)诵肛,可以使用abstract和sealed屹培,有protected修飾符默穴,必須使用new初始化。
如何選擇結(jié)構(gòu)還是類
討論了結(jié)構(gòu)與類的相同之處和差別之后褪秀,下面討論如何選擇使用結(jié)構(gòu)還是類:?
1. 堆棧的空間有限蓄诽,對(duì)于大量的邏輯的對(duì)象,創(chuàng)建類要比創(chuàng)建結(jié)構(gòu)好一些?
2. 結(jié)構(gòu)表示如點(diǎn)媒吗、矩形和顏色這樣的輕量對(duì)象仑氛,例如,如果聲明一個(gè)含有 1000 個(gè)點(diǎn)對(duì)象的數(shù)組闸英,則將為引用每個(gè)對(duì)象分配附加的內(nèi)存锯岖。在此情況下,結(jié)構(gòu)的成本較低甫何。?
3. 在表現(xiàn)抽象和多級(jí)別的對(duì)象層次時(shí)出吹,類是最好的選擇
4. 大多數(shù)情況下該類型只是一些數(shù)據(jù)時(shí),結(jié)構(gòu)時(shí)最佳的選擇
方法調(diào)用的目的
1)復(fù)用 reuse
2)隱藏復(fù)雜的計(jì)算過程和邏輯
3)分解計(jì)算過程:自頂向下辙喂,逐步求精
方法的聲明就是方法的定義
方法的構(gòu)成包括
方法頭:
有效的修飾符組合 + 方法名 + (參數(shù)列表)
1)有效的修飾符組合?
2)方法的名字?
方法的命名必須是一個(gè)動(dòng)詞或動(dòng)詞短語捶牢,所有單詞的首字母大寫。
3)參數(shù)列表
參數(shù)指的是Parameter, 全稱 formal parameter 加派,簡稱“形參”叫确。形參會(huì)參與構(gòu)成方法的算法邏輯。跑龍?zhí)咨纸酰谛问缴现衩悖屗惴軌蛲ㄟ^編譯。
Parameter是一種變量娄琉,C#有7種變量次乓,其中有三種是參數(shù)(值參數(shù),引用參數(shù)和輸出參數(shù))
方法體
1)語句
可以是語句塊孽水,
也可以 甚至只有一個(gè)分號(hào) ";"票腰,說明它的算法還沒有實(shí)現(xiàn),被成為抽象方法女气。
2)返回值
void不需要返回值杏慰,其他要return
方法的調(diào)用
在方法名后跟上一對(duì)圓括號(hào),在圓括號(hào)內(nèi)寫入必要的實(shí)際參數(shù)(argument)炼鞠。
只有在方法后面加了圓括號(hào)缘滥,才算是調(diào)用了這個(gè)方法。
形參用于聲明變量谒主,實(shí)參意味著調(diào)用這個(gè)方法時(shí)的真實(shí)條件朝扼。實(shí)參必須和方法定義中的形參一致(數(shù)量一致,類型一致)
靜態(tài)方法和實(shí)例方法
所有非靜態(tài)方法都是實(shí)例方法霎肯。//public的實(shí)例方法擎颖,可以用 “方法實(shí)例+“.”" 來調(diào)用
靜態(tài)方法隸屬于類榛斯,跟類是綁定的。
public static 的靜態(tài)方法搂捧,必須要用 “類+“.”" 來調(diào)用