最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

asp.net(C#)函數(shù)對象參數(shù)傳遞的問題

 更新時(shí)間:2009年12月28日 00:24:27   作者:  
我們知道在.net里class是引用類型,在函數(shù)參數(shù)表中的對象傳遞的都是對象的引用,所以在函數(shù)體內(nèi)對其對象參數(shù)的修改會(huì)影響函數(shù)外對應(yīng)的對象本身,例如下面的程序.
復(fù)制代碼 代碼如下:

class Program
{
static void Main(string[] args)
{
TestClass objA = new TestClass();
objA.Name = "I am ObjA";

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

TestFun(objA);

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

Console.Read();
}

static void TestFun(TestClass obj)
{
obj.Name = "I am be modified in TestFun";
Console.WriteLine(String.Format("In TestFun:{0}", obj.Name));
}

public class TestClass
{
public string Name { get; set; }
}
}

將對象objA作為參數(shù)傳遞給函數(shù)TestFun,這時(shí)傳遞的是對象objA的引用,所以在函數(shù)內(nèi)對objA的修改會(huì)直接應(yīng)用到這個(gè)對象本身。在函數(shù)TestFun內(nèi)修改了形參obj的Name屬性,所以在Main中再調(diào)用objA.Name時(shí)這個(gè)屬性值就變?yōu)樵赥estFun中修改后的值了。這一點(diǎn)很好理解,運(yùn)行結(jié)果也就是:
image
如果我們換一種寫法:
復(fù)制代碼 代碼如下:

class Program
{
static void Main(string[] args)
{
TestClass objA = new TestClass();
objA.Name = "I am ObjA";

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

TestFun(objA);

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

Console.Read();
}

static void TestFun(TestClass obj)
{
TestClass objB = new TestClass();
obj = objB;
obj.Name = "I am ObjB";
Console.WriteLine(String.Format("In TestFun:{0}", obj.Name));
}

public class TestClass
{
public string Name { get; set; }
}
}

那結(jié)果又將如何呢? 在TestFun中新創(chuàng)建了一個(gè)對象objB,接著將obj指向新創(chuàng)建的對象objB并對其的Name屬性賦值,所以在TestFun函數(shù)體里Console.WriteLine的時(shí)候obj.Name應(yīng)該是“I am ObjB”。那在Main里調(diào)用了TestFun(objA)后objA指向的對象到底做了改變沒有,它仍舊指向原來的對象還是已經(jīng)指向了在TestFun里創(chuàng)建的objB呢?

我的猜測是這樣的,將objA傳遞給TestFun傳遞的實(shí)際是objA的地址,在調(diào)用TestFun之前的對應(yīng)關(guān)系是:
image
objA是個(gè)變量,他本身的地址是000001,它存放的是objA對象的地址00E001。當(dāng)調(diào)用函數(shù)TestFun(objA)時(shí),由于要將objA作為參數(shù)傳遞給TestFun,所以在
棧中就復(fù)制一個(gè)objA地址的副本,這個(gè)副本的地址為000003,他存放的仍舊是objA對象的地址00E001,如圖:
image
所以在TestFun函數(shù)中,一開始o(jì)bj指向的還是objA對象。當(dāng)在TestFun中創(chuàng)建了一個(gè)對象objB后,內(nèi)存模型變?yōu)椋?

  image

  TestFun中執(zhí)行“obj=objB”后,obj指向objB對象,如下圖:

image

  所以執(zhí)行完TestFun函數(shù)后,Main函數(shù)中objA仍舊指向原來的objA對象,故運(yùn)行結(jié)果如下:

image

 

本文中的內(nèi)存模型僅是個(gè)人猜測,肯定有不正確或者不嚴(yán)謹(jǐn)?shù)牡胤?,希望不要誤導(dǎo)大家,也歡迎指正。

相關(guān)文章

  • .NET反向代理組件YARP介紹

    .NET反向代理組件YARP介紹

    Yarp是微軟團(tuán)隊(duì)開發(fā)的一個(gè)反向代理組件,除了常規(guī)的http和https轉(zhuǎn)換通訊,它最大的特點(diǎn)是可定制化,很容易根據(jù)特定場景開發(fā)出需要的定制代理通道。這篇文章介紹了.NET的反向代理組件YARP,對大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • asp.net下將純真IP數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中的代碼

    asp.net下將純真IP數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中的代碼

    純真IP數(shù)據(jù)庫包含最新的IP信息,通過IP我們可以查詢訪問者的來路,地理位置!但下載下來的IP數(shù)據(jù)無法被我們直接調(diào)用,所以我們需要編寫代碼將IP寫入到數(shù)據(jù)庫中供我們使用!
    2011-01-01
  • .NET中利用js讓子窗體向父頁面?zhèn)髦档膶?shí)現(xiàn)方法

    .NET中利用js讓子窗體向父頁面?zhèn)髦档膶?shí)現(xiàn)方法

    .NET中利用js讓子窗體向父頁面?zhèn)髦档膶?shí)現(xiàn)方法,需要的朋友可以參考一下
    2013-02-02
  • ASP.NET Core3.1 Ocelot路由的實(shí)現(xiàn)

    ASP.NET Core3.1 Ocelot路由的實(shí)現(xiàn)

    這篇文章主要介紹了ASP.NET Core3.1 Ocelot路由的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • .Net Core配置與自動(dòng)更新的實(shí)現(xiàn)方法

    .Net Core配置與自動(dòng)更新的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇.Net Core配置與自動(dòng)更新的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • VS .Net8 去掉空值警告的方法步驟

    VS .Net8 去掉空值警告的方法步驟

    .NET 8可以使用可空引用類型來去掉空值警告,本文主要介紹了VS .Net8 去掉空值警告的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 使用FlashPaper在線轉(zhuǎn)換.doc為.swf

    使用FlashPaper在線轉(zhuǎn)換.doc為.swf

    Flashpaper的使用相信大多數(shù)人都知道,這里的Demo是用于在線轉(zhuǎn)換 .doc文件轉(zhuǎn)換為 .swf的flash文件。
    2011-02-02
  • ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名

    ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名

    這篇文章主要介紹了ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名的技巧,較為詳細(xì)的講述了相關(guān)的命名空間的調(diào)用及語句執(zhí)行順序,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 把jQuery的each(callback)方法移植到c#中

    把jQuery的each(callback)方法移植到c#中

    jQuery中使用each(callback)方法可以很方便的遍歷集合,如
    2008-03-03
  • asp.net FreeTextBox配置詳解

    asp.net FreeTextBox配置詳解

    FreeTextBox 是一個(gè)開源的服務(wù)器控件。我們可以輕松地將其嵌入到 Web Forms 中實(shí)現(xiàn)HTML內(nèi)容的在線編輯。
    2009-11-11

最新評論

潞西市| 儋州市| 库车县| 台山市| 白玉县| 双牌县| 青海省| 澄城县| 营山县| 商丘市| 克山县| 平谷区| 京山县| 兴安盟| 玛沁县| 永平县| 唐海县| 肇庆市| 郴州市| 龙江县| 元江| 理塘县| 同仁县| 开远市| 高密市| 泾源县| 巍山| 德清县| 云安县| 西安市| 赤水市| 子洲县| 岳普湖县| 金乡县| 浦北县| 龙门县| 皮山县| 彰武县| 子长县| 台中市| 娄烦县|