日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

接收list参数_what?你竟然不知道C#中的方法及参数的类型解析!那还不快来瞅瞅...

發(fā)布時(shí)間:2025/3/15 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接收list参数_what?你竟然不知道C#中的方法及参数的类型解析!那还不快来瞅瞅... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
更多精彩,請(qǐng)點(diǎn)擊上方藍(lán)字關(guān)注我們!

前言

哈哈,今天來(lái)給大家講解一下關(guān)于C#中方法及參數(shù)的幾種類(lèi)型解析,沒(méi)有看過(guò)的朋友,可以仔細(xì)的來(lái)瞧瞧了!

那么,還是話(huà)不多說(shuō),直接給大家先上今天的干貨了。

一、方法中參數(shù)的類(lèi)型

1.in型參數(shù)

int 型參數(shù)通過(guò)值傳遞的方式將數(shù)值傳入方法中,即我們?cè)贘ava中常見(jiàn)的方法。

2.ref型參數(shù)

該種類(lèi)型的參數(shù)傳遞變量地址給方法(引用傳遞),傳遞前變量必須初始化。該類(lèi)型與out型的區(qū)別在與:

1ref 型傳遞變量前,變量必須初始化,否則編譯器會(huì)報(bào)錯(cuò),而out型則不需要初始化。

2ref 型傳遞變量,數(shù)值可以傳入方法中,而out型無(wú)法將數(shù)據(jù)傳入方法中。換言之,ref 型有進(jìn)有出,out 型只出不進(jìn)。

3.out 型參數(shù)

與 ref 型類(lèi)似,僅用于傳回結(jié)果。

4.注意事項(xiàng)

1out型數(shù)據(jù)在方法中必須要賦值,否則編譯器會(huì)報(bào)錯(cuò)。eg:如下圖若將代碼中的sum1方法的方法體 改為 a+=b; 則編譯器會(huì)報(bào)錯(cuò)。原因:out 型只出不進(jìn),在沒(méi)給 a 賦值前是不能使用的 改為 b+=b+2; 編譯器也會(huì)報(bào)錯(cuò)。原因:out 型數(shù)據(jù)在方法中必須要賦值。

2重載方法時(shí)若兩個(gè)方法的區(qū)別僅限于一個(gè)參數(shù)類(lèi)型為ref 另一個(gè)方法中為out,編譯器會(huì)報(bào)錯(cuò) eg:若將下面的代碼中將方法名 vsum1 改為 sum(或者將方法名 sum 改為 sum1),編譯器會(huì)報(bào)錯(cuò)。

Error 1 Cannot define overloaded method ‘sum’ because it differs from another method only on ref and out

原因:參數(shù)類(lèi)型區(qū)別僅限于為 ref 與為 out 時(shí),若重載對(duì)編譯器而言?xún)烧叩脑獢?shù)據(jù)表示完全相同。

class C{

//1. in型參數(shù)

publicvoid sum(int a, int b) {

a += b;

}

//2. ref型參數(shù)

publicvoid sum(refint a, int b) {

a += b;

}

//3. out型參數(shù)

publicvoid sum1(outint a, int b){

a = b+2;

}

publicstaticvoidMain(string[] args) {

C c = new C();

int a = 1, b = 2;

c.sum(a,b);

Console.WriteLine("a:{0}", a);

a = 1; b = 2;

c.sum(ref a, b);

Console.WriteLine("ref a:{0}", a);

a = 1; b = 2;

c.sum1(out a, b);

Console.WriteLine("out a:{0}", a);

}

}

輸出結(jié)果:

從代碼也可以看出,int 型參數(shù)為值傳遞,所以當(dāng)將變量 a 傳入方法時(shí),變量 a 的值并不會(huì)發(fā)生變化。而 ref 型參數(shù),由于是引用傳遞,將變量的值和地址都傳入方法中故變量值改變。out 型無(wú)法將變量的值傳入。但可以將變量的地址傳入并為該地址上的變量賦值。

5.ref 和 out 的區(qū)別

一個(gè)用關(guān)鍵字 ref 標(biāo)示,一個(gè)用 out 標(biāo)示。

牽扯到數(shù)據(jù)是引用類(lèi)型還是值類(lèi)型。

一般用這兩個(gè)關(guān)鍵字你是想調(diào)用一個(gè)函數(shù)將某個(gè)值類(lèi)型的數(shù)據(jù)通過(guò)一個(gè)函數(shù)后進(jìn)行更改。傳 out 定義的參數(shù)進(jìn)去的時(shí)候這個(gè)參數(shù)在函數(shù)內(nèi)部必須初始化。否則是不能進(jìn)行編譯的。ref 和 out 都是傳遞數(shù)據(jù)的地址,正因?yàn)閭髁说刂?#xff0c;才能對(duì)源數(shù)據(jù)進(jìn)行修改。

一般情況下不加 ref 或者 out 的時(shí)候,傳值類(lèi)型的數(shù)據(jù)進(jìn)去實(shí)際上傳進(jìn)去的是源數(shù)據(jù)的一個(gè)副本,也就是在內(nèi)存中新開(kāi)辟了一塊空間,這里面存的值是與源數(shù)據(jù)相等的,這也就是為什么在傳值類(lèi)型數(shù)據(jù)的時(shí)候你如果不用 return 是無(wú)法修改原值的原因。但是你如果用了 ref,或者 out,這一切問(wèn)題都解決了,因?yàn)樗麄儌鞯氖堑刂贰?/p>

out 比起 ref 來(lái)說(shuō),還有一個(gè)用法就是可以作為多返回值來(lái)用,都知道函數(shù)只能有一個(gè)返回值,C#里,如果你想讓一個(gè)函數(shù)有多個(gè)返回值,那么OUT能很容易解決。

二、對(duì)于復(fù)雜引用類(lèi)型參數(shù)傳遞的控制

所謂復(fù)雜,是參數(shù)是數(shù)組或集合類(lèi)型,或者參數(shù)包含這些類(lèi)型數(shù)據(jù),這種情況下上面的方法不能保證參數(shù)數(shù)據(jù)不被修改,因?yàn)榧词箤?duì)象為只讀的,但是對(duì)象中的數(shù)組或集合字段(屬性)還是可以修改的。

1.集合參數(shù)(包含集合字段的引用參數(shù)也一樣)

.net 4.5以前版本可以使用不包含修改集合元素方法的接口來(lái)代替具體集合類(lèi)型。例如使用IEnumerable接口代替List。4.5版本可以直接使用IReadOnlyCollection接口或?qū)崿F(xiàn)該接口的集合類(lèi)型。

2.數(shù)組參數(shù)

沒(méi)有好的辦法保護(hù)數(shù)組類(lèi)型參數(shù)不被修改,所以盡量避免使用數(shù)組類(lèi)型作為方法參數(shù),除非用到可選參數(shù)時(shí)候。

三、擴(kuò)展方法

擴(kuò)展方法可以實(shí)現(xiàn)在不需要修改目標(biāo)類(lèi),也不需要繼承目標(biāo)類(lèi)的情況下為其添加一個(gè)方法。規(guī)則:

1、擴(kuò)展類(lèi)必須為靜態(tài)類(lèi),擴(kuò)展方法必須為靜態(tài)方法。

2、擴(kuò)展方法的第1個(gè)形參開(kāi)頭必須使用 “this” 關(guān)鍵字然后再填寫(xiě)擴(kuò)展的目標(biāo)類(lèi)。

3、如果需要接收參數(shù)則從第2個(gè)參數(shù)開(kāi)始算起,第1個(gè)參數(shù)在真正調(diào)用方法時(shí)是隱藏的。

publicstaticclassExtensionString{

//向 String 類(lèi)擴(kuò)展一個(gè)統(tǒng)計(jì)單詞數(shù)量的方法

publicstaticintCountWord(thisString str) {

return str.Split(' ').Length;

}

}

classMainClass{

publicstaticvoidMain(string[] args) {

Console.WriteLine("單詞數(shù)量:"+ "Hello World".CountWord()); //沒(méi)有參數(shù)

}

}

總結(jié)

以上是生活随笔為你收集整理的接收list参数_what?你竟然不知道C#中的方法及参数的类型解析!那还不快来瞅瞅...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。