亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析C#中結構與類的區(qū)別

 更新時間:2016年12月22日 10:20:06   作者:反骨仔(二五仔)  
本文主要對C#結構與類的區(qū)別進行簡要分析,文中舉了實例,便于理解,具有很好的參考價值,需要的朋友一起來看下吧

一、

  •    結構:值類型,存儲在堆棧中,位于計算機的內存邏輯區(qū)域中
  •     類   :引用類型,存儲在堆中,位于計算機內存的不同邏輯位置

二、

  •   較小的數據使用結構;
  •   將一個結構值傳遞到方法時,傳遞的是整個數據結構;
  •   傳遞一個類,實際上是將引用傳遞到對象,即只有內存地址;
  •   對結構修改,改變的是結構的副本,這是值類型工作方式的定義:傳遞值的副本;
  •   傳遞一個引用到類本身意味著在類中修改值,實際上改變的是原始對象;

三、代碼例子

1.新建 PointClass.cs

namespace StructAndClass
{
 internal class PointClass
 {
 public PointClass(int x, int y)
 {
  X = x;
  Y = y;
 }
 public int X { get; set; }
 public int Y { get; set; }
 }
}

2.新建 PointStruct.cs

namespace StructAndClass
{
 internal struct PointStruct
 {
 public int X { get; set; }
 public int Y { get; set; }
 public PointStruct(int x, int y)
 {
  X = x;
  Y = y;
 }
 }
}

3.Program.cs

using System;
namespace StructAndClass
{
 internal class Program
 {
 private static void Main(string[] args)
 {
  Console.WriteLine("PointStruct =====");
  var pStruct = new PointStruct(10, 10);
  Console.WriteLine("初始值:x={0},y={1}", pStruct.X, pStruct.Y);
  ModifyPointStruct(pStruct);
  Console.WriteLine("調用 ModifyPointStruct() 后的值:x={0},y={1}", pStruct.X, pStruct.Y);
  Console.WriteLine();
  Console.WriteLine("PointClass =====");
  var pClass = new PointClass(10, 10);
  Console.WriteLine("初始值:x={0},y={1}", pClass.X, pClass.Y);
  ModifyPointClass(pClass);
  Console.WriteLine("調用 ModifyPointClass() 后的值:x={0},y={1}", pClass.X, pClass.Y);
  Console.Read();
 }
 private static void ModifyPointStruct(PointStruct point)
 {
  Console.WriteLine("調用方法:ModifyPointStruct");
  point.X = 20;
  point.Y = 20;
  Console.WriteLine("修改成的值:x={0}, y={1}", point.X, point.Y);
 }
 private static void ModifyPointClass(PointClass point)
 {
  Console.WriteLine("調用方法:ModifyPointClass");
  point.X = 20;
  point.Y = 20;
  Console.WriteLine("修改成的值:x={0}, y={1}", point.X, point.Y);
 }
 }
}

4.結果:

【解析】

ModifyPointStruct(PointStruct point) 調用時修改的只是結構副本,所以原來的結構并沒有發(fā)生變化;  

ModifyPointClass(PointClass point) 調用時所修改的對象是原對象,因為參數傳遞過來的是一個引用地址,這地址指向原對象

四、總結

結構是值類型并在堆棧中傳遞,每次使用方法進行修改的都只是結構副本;

至于類,傳遞的是內存地址的引用,修改的就是初始值

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關文章

  • C#根據http和ftp圖片地址獲取對應圖片

    C#根據http和ftp圖片地址獲取對應圖片

    這篇文章主要為大家詳細介紹了C#根據http和ftp圖片地址獲取對應圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • c# 應用事務的簡單實例

    c# 應用事務的簡單實例

    這篇文章介紹了c# 應用事務的簡單實例,有需要的朋友可以參考一下
    2013-09-09
  • C#條碼生成及打印實例代碼

    C#條碼生成及打印實例代碼

    這篇文章主要為大家詳細介紹了C#條碼生成及打印實例代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 詳解C# Socket異步通信實例

    詳解C# Socket異步通信實例

    本篇文章主要介紹了C# Socket異步通信,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C#基于COM方式讀取Excel表格的方法

    C#基于COM方式讀取Excel表格的方法

    這篇文章主要介紹了C#基于COM方式讀取Excel表格的方法,涉及C# COM組件的調用與Excel表格的使用技巧,需要的朋友可以參考下
    2016-07-07
  • C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問題

    C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問題

    這篇文章主要介紹了C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問題 ,文中給大家列舉通過兩種方法來判斷,需要的朋友可以參考下
    2018-10-10
  • C# 枚舉的使用簡介

    C# 枚舉的使用簡介

    這篇文章主要介紹了C# 枚舉的簡單使用,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#異步下載文件

    C#異步下載文件

    這篇文章主要介紹了C#異步下載文件的相關資料,需要的朋友可以參考下
    2016-01-01
  • C#使用CefSharp和網頁進行自動化交互的示例代碼

    C#使用CefSharp和網頁進行自動化交互的示例代碼

    CefSharp 是一個用 C# 編寫的開源庫,它封裝了 Google Chrome 瀏覽器的 Chromium 內核,CefSharp 允許開發(fā)者在其應用程序中嵌入瀏覽器功能,從而能夠展示網頁內容、執(zhí)行JavaScript代碼,本文給大家介紹了C#使用CefSharp和網頁進行自動化交互,需要的朋友可以參考下
    2024-07-07
  • c#多線程編程基礎

    c#多線程編程基礎

    線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程,本文使用示例介紹一下多線程的使用方法
    2014-02-02

最新評論