方法的結(jié)構(gòu)
方法是一塊具有名稱的代碼,在類和結(jié)構(gòu)中都經(jīng)常用到
局部變量
局部變量位于方法內(nèi)部,在方法中聲明時產(chǎn)生,在方法執(zhí)行結(jié)束時結(jié)束
類型推斷與var關(guān)鍵字
某些情況下,在聲明的開始部分包含類型名是多余的,因為可以通過初始化看出是什么類型,所以這時可以統(tǒng)一使用var關(guān)鍵字來聲明:
需要注意的是var只能用于局部變量,并且需要附帶初始化
嵌套塊中的局部變量
這里與C/C++不同的是,C#中即使是嵌套的不同的塊也不可以使用相同的局部變量名,嵌套塊中局部變量的生存期如下圖:
局部常量
需要注意的是,局部常量必須在聲明時初始化,且之后值不變。這里的const不是修飾符(如ref、out),而是類型聲明的一部分,其他都跟局部變量一致
返回值
通常方法被調(diào)用后可以返回一個值,要返回值時需要為方法設(shè)置一個返回類型,如果為空則設(shè)置為void,返回類型可以是自定義類型。
void方法通常不需要返回語句,但是使用return;提前退出方法塊也是常用的方法。
局部函數(shù)
也叫做本地函數(shù),意思是可以在函數(shù)體內(nèi)部定義函數(shù),這樣的好處是為了簡化函數(shù)邏輯,因為有事函數(shù)本身就是另一個函數(shù)的部分邏輯,這部分目前用的比較少。
參數(shù)
本節(jié)比較重要,且較復(fù)雜
形參
形參是局部變量,但是是在方法的參數(shù)列表中聲明,而不是在塊中
實參
在方法調(diào)用時用于初始化形參的參數(shù)就是實參,實參應(yīng)與形參類型匹配或可發(fā)生隱式轉(zhuǎn)換
值參數(shù)
值參數(shù)指的是一類函數(shù)參數(shù)類型,這種類型的特點是直接在棧中復(fù)制實參作為形參,為形參分配內(nèi)存。
當實參為值類型時,因為值參數(shù)會拷貝一個副本來執(zhí)行方法,所以并不會影響值類型的實參;
當實參為引用類型時,值參數(shù)會拷貝引用類型的副本,但是此時副本作為地址顯然指向同一塊堆中的位置,所以此時對形參執(zhí)行的方法會影響實參的值。
由上面這段代碼可見,值類型不受方法影響,而引用類型發(fā)生了變化。
注意:這里值類型與值參數(shù)要區(qū)別開,前者是相對于內(nèi)存而言的數(shù)據(jù)項類型,值類型表示類型本身包含其值;而值參數(shù)這里表示一種函數(shù)的參數(shù)類型。
引用參數(shù)
使用引用參數(shù)時,必須加上ref作為修飾符,且參數(shù)應(yīng)為變量而不是實際值
使用時容易出錯的一點是需要在聲明和調(diào)用時都加上ref
與值參數(shù)在棧中為形參分配內(nèi)存不同,引用參數(shù)不會為形參分配內(nèi)存,而是將形參作為實參的別名
ref返回和ref局部變量
ref局部變量可以為變量創(chuàng)建別名,即使是值類型的變量,這樣對原變量和別名的改動都會同步。
聲明方式是:
實際上ref局部變量經(jīng)常與ref返回一起使用。
ref返回使方法返回變量的引用而不是變量值,聲明方法為:
ref返回的使用有很多限制:
引用類型作為值參數(shù)
引用類型作為值參數(shù)時,前面提到了,會復(fù)制一份實參的地址,后面也是對實參執(zhí)行方法,但是如果創(chuàng)建一個新對象并賦值給形參,就會將形參與實參之間的聯(lián)系轉(zhuǎn)換為形參與新對象之間的聯(lián)系,并且這個新對象是局部的,在方法執(zhí)行完畢時就會釋放,所以創(chuàng)建新對象并賦值給形參之后就會切斷形參與實參的聯(lián)系。
在方法開始時與前面一致,形參實參都指向堆中同一對象,但當方法分配新對象給形參后就會切斷與實參的聯(lián)系,方法調(diào)用之后,形參和新對象都會消失。
引用類型作為引用參數(shù)
引用類型作為引用參數(shù)時,根據(jù)前面的內(nèi)容,引用參數(shù)的形參是實參的別名,所以也是指向堆中同一對象,但當方法分配新對象給形參后,因為形參是實參的別名,實參也會指向新對象,此時形參實參都指向新對象,當方法調(diào)用完成后形參消失,實參指向新對象。
文章來源:http://www.zghlxwxcb.cn/news/detail-467935.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-467935.html
到了這里,關(guān)于【C#圖解教程】 第六章 方法(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!