C#基礎(chǔ)知識(shí) 之 ? ref 和 out 之間的江湖趣聞


ref 和 out 之間的江湖趣聞

本片文章將詳細(xì)介紹一下在C#中的關(guān)鍵字:ref 和 out 的使用和區(qū)別

話不多說(shuō)另凌,下面開(kāi)始介紹啦


引用參數(shù)和輸出參數(shù)

按照國(guó)際慣例羽圃,要了解一個(gè)東西的時(shí)候荷愕,首先明白它是什么已骇,然后明白它能做什么游沿,最后要知道為什么像樊。

所以在介紹ref和out之前要先簡(jiǎn)單了解一下什么是引用參數(shù)與輸出參數(shù)泽西,因?yàn)槭褂胷ef和out要有所了解

引用參數(shù):

引用參數(shù)是一個(gè)對(duì)變量的內(nèi)存位置的引用佛纫。當(dāng)按引用傳遞參數(shù)時(shí)缝彬,與值參數(shù)不同的是萌焰,它不會(huì)為這些參數(shù)創(chuàng)建一個(gè)新的存儲(chǔ)位置。引用參數(shù)表示與提供給方法的實(shí)際參數(shù)具有相同的內(nèi)存位置谷浅。

引用參數(shù)在方法中使用時(shí)必須為其賦值扒俯,并且必須是由變量賦予的值,不能是常量或表達(dá)式一疯。如果需要將方法中的每一個(gè)參數(shù)都設(shè)置為ref類型參數(shù)撼玄,則需要在每一個(gè)參數(shù)前面加上ref關(guān)鍵字修飾。

在 C# 中墩邀,使用 ref 關(guān)鍵字聲明引用參數(shù)

輸出參數(shù):

return 語(yǔ)句可用于只從函數(shù)中返回一個(gè)值掌猛。但是,可以使用 輸出參數(shù) 來(lái)從函數(shù)中返回兩個(gè)值眉睹。輸出參數(shù)會(huì)把方法輸出的數(shù)據(jù)賦給自己荔茬,其他方面與引用參數(shù)相似。輸出參數(shù)相當(dāng)于返回值辣往,即在方法調(diào)用完成后可以將返回的結(jié)果存放到輸出參數(shù)中兔院。

在 C# 中,使用 out關(guān)鍵字聲明輸出參數(shù)

ref 和 out 的定義

簡(jiǎn)單了解一下引用參數(shù)與輸出參數(shù)站削,下面就可以對(duì)ref和out有一個(gè)更清楚的定位和認(rèn)知了坊萝。

再簡(jiǎn)單介紹一下ref和out

ref:“The ref keyword indicates a value that is passed by reference.”

ref也是Reference的縮寫,意思就是通過(guò)引用來(lái)傳遞參數(shù)许起。

out:As a parameter modifier, which lets you pass an argument to a method by reference rather than by value./“out”作為一個(gè)參數(shù)修飾符十偶,允許您通過(guò)引用而不是通過(guò)值將參數(shù)傳遞給方法

ref和out的使用

//不使用ref和out

void Method(int a)

{

? ? a= 100;

}

int a=0;

Method(a);

Console.WriteLine(a);

//輸出:0


//使用ref

void Method(ref int Refa)

{

? ? Refa= 100;

}

int a= 1;

Method(ref a);

Console.WriteLine(a);

**//輸出:100**


//使用out

void Method(out int Outa)

{

? ? Outa= 100;

}

int a;

Method(out a);

Console.WriteLine(a);

//輸出:100


上面舉了三個(gè)簡(jiǎn)單的方法,分別是不使用修飾符园细,使用ref惦积,和使用out

可以看出,在使用ref猛频、out后狮崩,a的值經(jīng)過(guò)調(diào)用了Method方法后是改變了的,就是因?yàn)閞ef和out是用的地址傳參

而不使用的時(shí)候是按值傳參鹿寻,a的值不會(huì)發(fā)生變化

ref和out的區(qū)別

我們這里著重看一下ref和out的使用區(qū)別

用ref的時(shí)候睦柴,我們需要在調(diào)用方法之前給a賦初值,不然就會(huì)如下報(bào)錯(cuò)毡熏,而out則不需要坦敌。

盡管作為 out 參數(shù)傳遞的變量不必在傳遞之前進(jìn)行初始化,但是out也有要求,使用out的時(shí)候狱窘,必須在方法體內(nèi)給其賦值杜顺,賦值之后可以進(jìn)行使用,未賦值時(shí)不能用蘸炸,但是ref不需要躬络。

例如下圖所示,并未給Refa賦值就可調(diào)用搭儒,而Outb未賦值之前不可調(diào)用洗鸵,賦值之后才可調(diào)用。而且如果方法體內(nèi)未給Outb賦值的話仗嗦,VS會(huì)報(bào)錯(cuò)。

在使用out的時(shí)候甘凭,不管有沒(méi)有對(duì)靜態(tài)變量b賦值稀拐,只要出使用out修飾符,就必須對(duì)out修飾的參數(shù)Outb賦值丹弱。

所以out應(yīng)該是在方法內(nèi)部做了分配地址的操作德撬,然后把地址賦給外部的變量。但是ref的話是直接傳遞外部地址進(jìn)方法躲胳。

總結(jié)

ref和out傳參使用的時(shí)候蜓洪,使用的是所傳參的地址,所以在使用之后自身的值會(huì)發(fā)生改變坯苹。

使用ref的時(shí)候隆檀,必須先給ref的參數(shù)賦值才能使用,而out則是在方法體中必須給out的參數(shù)賦值粹湃,才可使用恐仑。

關(guān)鍵字“ref“和”out”之間的唯一區(qū)別:使用ref需先賦初值,使用out則需在方法體中賦值为鳄。

整體來(lái)說(shuō)裳仆,系統(tǒng)對(duì)ref的限制是更少一些的。out雖然不要求在調(diào)用前一定要初始化孤钦,但是其值在函數(shù)內(nèi)部是不可見(jiàn)的歧斟,也就是不能使用通過(guò)out傳進(jìn)來(lái)的值,并且一定要在函數(shù)內(nèi)賦一個(gè)值偏形【残洌或者說(shuō)函數(shù)承擔(dān)初始化這個(gè)變量的責(zé)任。

就先介紹到這里了壳猜,如果還有什么需要補(bǔ)充的或者文章哪里有紕漏都可以評(píng)論說(shuō)一下哦


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勾徽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喘帚,老刑警劉巖畅姊,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吹由,居然都是意外死亡若未,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門倾鲫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)粗合,“玉大人,你說(shuō)我怎么就攤上這事乌昔∠毒危” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵磕道,是天一觀的道長(zhǎng)供屉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)溺蕉,這世上最難降的妖魔是什么伶丐? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮疯特,結(jié)果婚禮上哗魂,老公的妹妹穿的比我還像新娘。我一直安慰自己漓雅,他們只是感情好录别,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著故硅,像睡著了一般庶灿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吃衅,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天往踢,我揣著相機(jī)與錄音,去河邊找鬼徘层。 笑死峻呕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的趣效。 我是一名探鬼主播瘦癌,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跷敬!你這毒婦竟也來(lái)了讯私?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斤寇,沒(méi)想到半個(gè)月后桶癣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娘锁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年牙寞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫秆。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡间雀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镊屎,到底是詐尸還是另有隱情惹挟,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布缝驳,位于F島的核電站匪煌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏党巾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一霜医、第九天 我趴在偏房一處隱蔽的房頂上張望齿拂。 院中可真熱鬧,春花似錦肴敛、人聲如沸署海。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砸狞。三九已至,卻和暖如春镀梭,著一層夾襖步出監(jiān)牢的瞬間刀森,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工报账, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留研底,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓透罢,卻偏偏與公主長(zhǎng)得像榜晦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子羽圃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容