欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談C#中對引用類型的誤解

 更新時間:2019年08月05日 10:18:25   作者:qylost  
這篇文章主要介紹了淺談C#中對引用類型的誤解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

值類型和引用類型作為兩個非?;A(chǔ)而且很重要的概念,一般我們都是在最開始的時候?qū)W的,你聽到的可能是這樣的:值類型傳遞的是具體的值(副本),引用類型傳遞的是引用,對于前者大家都不會有什么疑惑,但是在引用類型上就可能會進入一些誤區(qū)。

概念插入:

值類型:值類型傳遞的是數(shù)據(jù)的副本,也就是將整個數(shù)據(jù)進行Copy然后賦值給另一個變量。

引用類型:傳遞的是對象的地址/路徑(一般都會叫做引用),在對象的賦值過程中實際上是把目標對象的地址以副本的形式給了接收的對象。

實例說明

如下我們新建了一個Student類,定義了一個變量student1,然后定義了一個變量student2并將student1賦值給了它,緊接著創(chuàng)建了student3并將student3賦值給了student1。

輸出結(jié)果:1

class Program
{
  static void Main(string[] args)
  {
    //step1
    Student student1 = new Student() { StudentId = 1 };
    Student student2 = student1;
    Student student3 = new Student() { StudentId = 3 };
    //step2
    student1 = student3;
    Console.WriteLine(student2.StudentId.ToString());
    Console.ReadKey();
  }
}
public class Student
{
  public int StudentId { get; set; }
}

Step1的操作如下圖所示:

在圖中的右側(cè)我們使用矩形代替兩個通過new關(guān)鍵字創(chuàng)建的對象,并為其標識了兩個虛擬的ID,在左側(cè)我們定義了三個變量,如圖的圓角矩形所示,這三個變量不是真正意義上的對象,只是對象的一個所在地址而已,也就是我們通過這個變量就可以找到一個特定的地址。其中student1變量持有的ID(內(nèi)存地址)為1001,student2也是1001,student3為1002。這里需要注意的是student1的1001和student2的1001雖然都是指向的1001,但是這兩個1001都只是對象地址的一個副本,也就是說student1的1001和student2的1001并不是同一個,只是被Copy了而已(可以理解為這個地址是以值類型的方式進行傳遞的)。

這里要注意的是變量student2和student1是沒有關(guān)系的,它們只和右側(cè)的1001有關(guān)系,只是它們地址的值是相等的。

new關(guān)鍵字:

創(chuàng)建特定對象的實例并返回其引用地址(只是返回了地址的一個副本,而不是真正的對象)

When the object is created, the memory is allocated on the managed heap, and the variable holds only a reference to the location of the object.(來源于官方文檔:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/

譯:創(chuàng)建對象后,內(nèi)存會在托管堆上進行分配,并且變量只保留對對象位置的引用。

Step2的操作如下圖所示:

在Step2的代碼中我們將student3的變量賦值給了student1,那么這段代碼執(zhí)行的是將student3對應(yīng)的ID(引用地址)以副本的方式給了student1。

//step2
student1 = student3;
Console.WriteLine(student2.StudentId.ToString());
Console.ReadKey();

如果你對引用傳遞理解有有偏差的話你可能會認為student2的地址也會變成1002,也就是student2.StudentId變成了3。這樣理解是不正確的,我們剛才說過了雖然它們的引用地址是都是1001,但是這個地址也是通過副本進行傳遞的。也就是說當student1的地址發(fā)生改變并不會影響student2的地址。

再述:

當右側(cè)對象中的值發(fā)生改變時,通過左側(cè)變量來獲取拿到的就是改變后的值,而當左側(cè)變量值的改變時并不會影響右側(cè)對象值的。左側(cè)變量值的改變只是對應(yīng)的地址發(fā)生了改變而不是對象的值發(fā)生了改變。

舉例分析

這里從我們常用的兩個購物平臺淘寶、京東來舉例說明引用地址傳遞。

右側(cè)有兩個對象分別是淘寶和京東,左側(cè)我們定義了三個變量來保存這個對象的地址(和上邊的例子是一樣的)

如下圖,我們將valA變量存放的地址改成了www.jd.com ,我們只是改變了變量存放的地址而并沒有改變valA之前所對應(yīng)的對象的值。

總結(jié)

引用類型傳遞的是對象的引用,是將引用地址以副本的方式進行傳遞。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 爬蟲簡單教程

    C# 爬蟲簡單教程

    這篇文章主要介紹了C# 爬蟲的簡單教程,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • 輕松學(xué)習C#的密封類

    輕松學(xué)習C#的密封類

    輕松學(xué)習C#的密封類,對C#的密封類感興趣的朋友可以參考本篇文章,幫助大家更靈活的運用C#的密封類
    2015-11-11
  • 淺談C#.NET、JavaScript和JSON

    淺談C#.NET、JavaScript和JSON

    本文介紹了C#.NET、JavaScript和JSON的相關(guān)知識,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • MVVM簡化的Messager類實例代碼

    MVVM簡化的Messager類實例代碼

    這篇文章主要給大家介紹了關(guān)于MVVM簡化的Messager類的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2018-06-06
  • 圖解如何使用C#創(chuàng)建Windows服務(wù)

    圖解如何使用C#創(chuàng)建Windows服務(wù)

    本文主要介紹了圖解如何使用C#創(chuàng)建Windows服務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-07-07
  • C#創(chuàng)建Windows服務(wù)的圖文教程

    C#創(chuàng)建Windows服務(wù)的圖文教程

    本文主要介紹了C#創(chuàng)建Windows服務(wù)的圖文教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-06-06
  • C#實現(xiàn)圍棋游戲

    C#實現(xiàn)圍棋游戲

    這篇文章主要為大家詳細介紹了C#實現(xiàn)圍棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新

    C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新

    這篇文章主要介紹了C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • c#中switch case的用法實例解析

    c#中switch case的用法實例解析

    這篇文章主要介紹了c#中switch case的用法實例解析,對于C#的初學(xué)者來說有必要熟練掌握,需要的朋友可以參考下
    2014-08-08
  • C#清除字符串內(nèi)空格的方法

    C#清除字符串內(nèi)空格的方法

    這篇文章主要介紹了C#清除字符串內(nèi)空格的方法,是C#操作字符串非常實用的技巧,需要的朋友可以參考下
    2014-10-10

最新評論