1. 程式人生 > >C#中類與結構的區別實例分析

C#中類與結構的區別實例分析

類與結構 main bds nbsp 模擬鼠標 指向 img adding 區別

類與結構是C#程序設計中基本的數據類型,而初學者往往不能很好的分清二者之間的區別。本文就以附帶實例形式加以說明。具體如下:


一、基本概念:

類:

引用類型,存儲在堆中,棧中存儲引用地址,在方法的傳輸中只是傳輸地址的引用,修改指向的對象會影響原有對象的值,傳輸中消耗內存小

結構:

值類型,存儲在堆棧中,傳輸過程中傳輸整個對象的副本,修改指向對象的值不會影響原有的對象,傳輸中消耗內存大


二、實例代碼如下:

class Program
{
    static void Main(string[] args)
    {
      /*聲明類對象 並賦值10*/
      TestClass TC1 = new TestClass();
      TC1.x = 10;
      TC1.y = "10";
      Console.WriteLine("/*聲明類對象TC1 並賦值10*/");
      Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
      TC1.x = 20;
      TC1.y = "20";
      Console.WriteLine("/*修改類對象 TC1 值為20*/");
      Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
      /*執行類傳遞 並修改傳遞後的值*/
      Console.WriteLine("/*創建類對象 TC2 指向 TC1,並修改 值為10*/");
      TestClass TC2 = TC1;
      TC2.x = 10;
      TC2.y = "10";
      Console.WriteLine("/*類傳輸過程中傳遞的是存儲在堆棧中的引用地址 傳輸中消耗內存小 並沒有傳送存儲在堆中的值 所以原有對象受到影響*/");
      Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
      Console.WriteLine("TC2 x={0} y={0}", TC2.x, TC2.y);
      /*聲明結構對象*/
      Console.WriteLine("/*聲明結構對象TS1 並賦值10*/");
      TestStruct TS1 = new TestStruct();
      TS1.x = 10;
      TS1.y = "10";
      Console.WriteLine("TS1 x={0} y={0}", TS1.x, TS1.y);
      Console.WriteLine("/*修改結構對象 TS1 值為20*/");
      TS1.x = 20;
      TS1.y = "20";
      Console.WriteLine("TS1 x={0} y={0}", TS1.x, TS1.y);
      /*執行結構傳遞 並修改傳遞後的值*/
      Console.WriteLine("/*創建結構對象 TS2 指向 TS1,並修改 值為10*/");
      TestStruct TS2 = TS1;
      TS2.x = 10;
      TS2.y = "10";
      Console.WriteLine("/*結構傳輸過程中 會傳遞整個對象的副本 傳輸中消耗內存大 所以修改對原有對象不受影響*/");
      Console.WriteLine("TS1 x={0} y={0}", TS1.x, TS1.y);
      Console.WriteLine("TS2 x={0} y={0}", TS2.x, TS2.y);
      Console.ReadLine();
    }
}
public class TestClass
{
  public int x;
  public string y;
}
public struct TestStruct
{
  public int x;
  public string y;
}

代碼運行結果如下圖所示:

技術分享

除聲明外,跑步客文章均為原創,轉載請以鏈接形式標明本文地址
C#中類與結構的區別實例分析

本文地址: http://www.paobuke.com/develop/c-develop/pbk23626.html






相關內容

技術分享Asp.Net中避免重復提交和彈出提示框的實例代碼技術分享C# IEnumerableoíIEnumerator?ó?ú?3??技術分享C# 字符串string和內存流MemoryStream及比特數組byte[]之間相互轉換技術分享C#實現判斷一個時間點是否位於給定時間區間的方法
技術分享C#采用mouse_event函數實現模擬鼠標功能技術分享C#生成唯一不重復訂單號技術分享
C#將文件復制到指定文件夾並整理技術分享C#實現移除字符串末尾指定字符的方法

C#中類與結構的區別實例分析