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

理解C#中參數(shù)的值和引用以及傳遞結(jié)構(gòu)和類引用的區(qū)別

 更新時間:2016年01月30日 16:36:34   投稿:goldensun  
這篇文章主要介紹了理解C#中參數(shù)的值和引用以及傳遞結(jié)構(gòu)和類引用的區(qū)別,文中舉了兩段代碼例子來簡單說明,需要的朋友可以參考下

值與引用參數(shù)之間的區(qū)別:
在 C# 中,既可以通過值也可以通過引用傳遞參數(shù)。在調(diào)用環(huán)境中通過引用傳遞參數(shù)允許函數(shù)成員(方法、屬性、索引器、運算符和構(gòu)造函數(shù))更改參數(shù)的值,并保持該更改。若要通過引用傳遞參數(shù),請使用 ref 或 out 關(guān)鍵字。
下面的示例闡釋值與引用參數(shù)之間的區(qū)別:

class Program
{
  static void Main(string[] args)
  {
    int arg;

    // Passing by value.
    // The value of arg in Main is not changed.
    arg = 4;
    squareVal(arg);
    Console.WriteLine(arg);
    // Output: 4

    // Passing by reference.
    // The value of arg in Main is changed.
    arg = 4;
    squareRef(ref arg);
    Console.WriteLine(arg);
    // Output: 16 
  }

  static void squareVal(int valParameter)
  {
    valParameter *= valParameter;
  }

  // Passing by reference
  static void squareRef(ref int refParameter)
  {
    refParameter *= refParameter;
  }
}

向方法傳遞結(jié)構(gòu)和向方法傳遞類引用之間的區(qū)別

下面的示例演示如何使用 結(jié)構(gòu) 到方法與通過 類 實例不同傳遞給方法。在此示例中,兩個參數(shù) (結(jié)構(gòu)和類實例) 將值和兩個方法通過更改參數(shù)的一個字段的值。但是,這兩個方法的結(jié)果是不同的,因為的傳遞,當(dāng)您通過時結(jié)構(gòu)什么不同通過,則可以通過類的實例。
由于結(jié)構(gòu)是 值類型,那么,當(dāng)您對方法的 使用結(jié)構(gòu)值 ,方法受到并對結(jié)構(gòu)參數(shù)的副本。方法無法訪問原始結(jié)構(gòu)中調(diào)用方法并不能將其更改任何方式。該方法可以僅更改副本。
類的實例是 引用類型,而不是值類型。當(dāng)對方法的 引用類型通過值 ,方法進行引用的復(fù)制到類實例。即方法受到實例,而不是復(fù)制實例的地址的副本。在調(diào)用方法的類實例都有一個地址,在調(diào)用方法的參數(shù)的地址的副本,因此,兩個地址是否引用同一對象。由于該參數(shù)包含該地址的副本,調(diào)用方法不能更改類實例的地址在調(diào)用方法的。但是,調(diào)用方法可以使用該地址訪問原始地址和該副本引用的類成員。如果調(diào)用方法將類成員,在調(diào)用方法的原始類的實例也會發(fā)生更改。
下面的示例的輸出顯示差異。,因為該方法在參數(shù)中使用該地址查找類的實例,的指定字段調(diào)用將類實例的 willIChange 字段的值傳遞給方法 ClassTaker 。調(diào)用不更改結(jié)構(gòu)的 willIChange 字段在調(diào)用方法為方法 StructTaker ,因為參數(shù)的值是結(jié)構(gòu)的副本,而不是復(fù)制其地址。 StructTaker 更改該副本,因此,該副本丟失,在向 StructTaker 調(diào)用完成時。

class TheClass
{
  public string willIChange;
}

struct TheStruct
{
  public string willIChange;
}

class TestClassAndStruct
{
  static void ClassTaker(TheClass c)
  {
    c.willIChange = "Changed";
  }

  static void StructTaker(TheStruct s)
  {
    s.willIChange = "Changed";
  }

  static void Main()
  {
    TheClass testClass = new TheClass();
    TheStruct testStruct = new TheStruct();

    testClass.willIChange = "Not Changed";
    testStruct.willIChange = "Not Changed";

    ClassTaker(testClass);
    StructTaker(testStruct);

    Console.WriteLine("Class field = {0}", testClass.willIChange);
    Console.WriteLine("Struct field = {0}", testStruct.willIChange);

    // Keep the console window open in debug mode.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
  }
}

輸出:

  Class field = Changed
  Struct field = Not Changed


相關(guān)文章

  • Unity實現(xiàn)3D射箭小游戲

    Unity實現(xiàn)3D射箭小游戲

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)3D射箭小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 淺談C#設(shè)計模式之工廠模式

    淺談C#設(shè)計模式之工廠模式

    這篇文章主要介紹了淺談C#設(shè)計模式之工廠模式,需要的朋友可以參考下
    2014-12-12
  • C#DirectoryInfo類用法詳解

    C#DirectoryInfo類用法詳解

    這篇文章主要介紹了C#DirectoryInfo類用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • VSCode配置C#運行環(huán)境的完整步驟

    VSCode配置C#運行環(huán)境的完整步驟

    這篇文章主要給大家介紹了關(guān)于VSCode配置C#運行環(huán)境的完整步驟,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • c#創(chuàng)建浮動工具欄功能示例

    c#創(chuàng)建浮動工具欄功能示例

    這篇文章主要介紹了c#創(chuàng)建浮動工具欄功能示例,大家參考使用吧
    2013-12-12
  • c#深拷貝文件夾示例

    c#深拷貝文件夾示例

    這篇文章主要介紹了c#深拷貝文件夾示例,需要的朋友可以參考下
    2014-04-04
  • 淺析C#異步中的Overlapped是如何尋址的

    淺析C#異步中的Overlapped是如何尋址的

    用ReadAsync做文件異步讀取時,在Win32層面會傳lpOverlapped到內(nèi)核層,那在內(nèi)核層回頭時,它是如何通過這個lpOverlapped尋找到?ReadAsync這個異步的Task的呢,下面我們就來簡單分析一下吧
    2025-01-01
  • C#私有構(gòu)造函數(shù)使用示例

    C#私有構(gòu)造函數(shù)使用示例

    本文主要介紹了C#私有構(gòu)造函數(shù)使用方法,私有構(gòu)造函數(shù)是一種特殊的實例構(gòu)造函數(shù)。它通常用在只包含靜態(tài)成員的類中。如果類具有一個或多個私有構(gòu)造函數(shù)而沒有公共構(gòu)造函數(shù),則其他類(除嵌套類外)無法創(chuàng)建該類的實例
    2014-01-01
  • C# 忽略大小寫進行字符串比較

    C# 忽略大小寫進行字符串比較

    這篇文章主要介紹了C# 字符串比較忽略大小寫的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#實現(xiàn)websocket雙向通信的示例代碼

    C#實現(xiàn)websocket雙向通信的示例代碼

    本文基于WebSocketSharp實現(xiàn)了websocket雙向通信,除基本的客戶端向服務(wù)端發(fā)送消息外,也支持客戶端向指定的客戶端發(fā)送消息、群發(fā)消息,其他協(xié)議可自定義,廢話不多說,直接上干貨,需要的朋友可以參考下
    2024-06-06

最新評論

武义县| 根河市| 佳木斯市| 衡东县| 连江县| 巨野县| 彭水| 射阳县| 响水县| 城口县| 新巴尔虎左旗| 安阳县| 庆阳市| 建宁县| 临桂县| 吴忠市| 温州市| 馆陶县| 江阴市| 康保县| 南安市| 昌邑市| 汉寿县| 井冈山市| 丰原市| 茌平县| 普陀区| 阿城市| 鄂伦春自治旗| 洛南县| 四川省| 延庆县| 寻乌县| 苍山县| 民乐县| 合阳县| 新野县| 阳信县| 舞钢市| 来宾市| 博野县|