一道關(guān)于C#參數(shù)傳遞的面試題分析
本文實(shí)例分析了一道關(guān)于C#參數(shù)傳遞的面試題。分享給大家供大家參考。具體如下:
1.定義一個(gè)類MPigeon,調(diào)用一個(gè)Swap交互函數(shù),問(wèn)最后實(shí)參的結(jié)果是什么
類定義:
public class MPigeon { public string Name { get; set; } }
交換函數(shù):
public void Swap(object a,object b) { object temp=a; a=b; b=temp; }
測(cè)試代碼:
private void button2_Click(object sender, EventArgs e) { MPigeon a = new MPigeon() { Name = "Black" }; MPigeon b = new MPigeon() { Name = "White" }; Swap(a, b); string ResultMsg = string.Format("a:{0},b:{1}", a.Name, b.Name); MessageBox.Show(ResultMsg); }
結(jié)果顯示如下:
結(jié)果分析:
由于實(shí)參變量和形參變量都是引用類型,它們都指向內(nèi)存堆中的某一對(duì)象的地址,
函數(shù)是將實(shí)參變量指向的地址值復(fù)制了一份給形參變量,由于形參變量和實(shí)參變量指向堆中同一地址
由于是復(fù)制了一份,所以實(shí)參的地址在swap函數(shù)中是沒(méi)有被改變的,所以最后輸出的結(jié)果,實(shí)參的值和原來(lái)是完全一樣的
(注意:swap函數(shù)只是交互了一下形參的地址而已,而沒(méi)有改變它們的值,如果改變了值,那實(shí)參的值也會(huì)跟著改變)
例如:
public void Swap2(object a, object b) { ((MPigeon)a).Name = "Ronaldo"; ((MPigeon)b).Name = "Rivaldo"; }
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C# 通過(guò)Socket讀取大量數(shù)據(jù)的示例
這篇文章主要介紹了C# 通過(guò)Socket讀取大量數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03WPF中的ListBox實(shí)現(xiàn)按塊顯示元素的方法
這篇文章主要介紹了WPF中的ListBox實(shí)現(xiàn)按塊顯示元素的方法,涉及ListBox屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2016-09-09c#linq里的Skip和Take實(shí)現(xiàn)分頁(yè)或遍歷
LINQ的優(yōu)勢(shì)在于它提供了一種直觀、類型安全的方式來(lái)操作各種類型的數(shù)據(jù),查詢常需要獲取一部分?jǐn)?shù)據(jù),為了實(shí)現(xiàn)這一功能,LINQ提供了Take?和Skip運(yùn)算符,Take運(yùn)算符用于從一個(gè)序列中返回指定個(gè)數(shù)的元素,Skip運(yùn)算符用于從一個(gè)序列中跳過(guò)指定個(gè)數(shù)的元素2024-01-01RegexOptions.IgnoreCase正則表達(dá)式替換,忽略大小寫(xiě)
RegexOptions.IgnoreCase正則表達(dá)式替換,忽略大小寫(xiě),需要的朋友可以參考一下2013-03-03