C#中類與結(jié)構(gòu)的區(qū)別實(shí)例分析
類與結(jié)構(gòu)是C#程序設(shè)計(jì)中基本的數(shù)據(jù)類型,而初學(xué)者往往不能很好的分清二者之間的區(qū)別。本文就以附帶實(shí)例形式加以說明。具體如下:
一、基本概念:
類:引用類型,存儲(chǔ)在堆中,棧中存儲(chǔ)引用地址,在方法的傳輸中只是傳輸?shù)刂返囊茫薷闹赶虻膶?duì)象會(huì)影響原有對(duì)象的值,傳輸中消耗內(nèi)存小。
結(jié)構(gòu):值類型,存儲(chǔ)在堆棧中,傳輸過程中傳輸整個(gè)對(duì)象的副本,修改指向?qū)ο蟮闹挡粫?huì)影響原有的對(duì)象,傳輸中消耗內(nèi)存大。
二、實(shí)例代碼如下:
class Program
{
static void Main(string[] args)
{
/*聲明類對(duì)象 并賦值10*/
TestClass TC1 = new TestClass();
TC1.x = 10;
TC1.y = "10";
Console.WriteLine("/*聲明類對(duì)象TC1 并賦值10*/");
Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
TC1.x = 20;
TC1.y = "20";
Console.WriteLine("/*修改類對(duì)象 TC1 值為20*/");
Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
/*執(zhí)行類傳遞 并修改傳遞后的值*/
Console.WriteLine("/*創(chuàng)建類對(duì)象 TC2 指向 TC1,并修改 值為10*/");
TestClass TC2 = TC1;
TC2.x = 10;
TC2.y = "10";
Console.WriteLine("/*類傳輸過程中傳遞的是存儲(chǔ)在堆棧中的引用地址 傳輸中消耗內(nèi)存小 并沒有傳送存儲(chǔ)在堆中的值 所以原有對(duì)象受到影響*/");
Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
Console.WriteLine("TC2 x={0} y={0}", TC2.x, TC2.y);
/*聲明結(jié)構(gòu)對(duì)象*/
Console.WriteLine("/*聲明結(jié)構(gòu)對(duì)象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("/*修改結(jié)構(gòu)對(duì)象 TS1 值為20*/");
TS1.x = 20;
TS1.y = "20";
Console.WriteLine("TS1 x={0} y={0}", TS1.x, TS1.y);
/*執(zhí)行結(jié)構(gòu)傳遞 并修改傳遞后的值*/
Console.WriteLine("/*創(chuàng)建結(jié)構(gòu)對(duì)象 TS2 指向 TS1,并修改 值為10*/");
TestStruct TS2 = TS1;
TS2.x = 10;
TS2.y = "10";
Console.WriteLine("/*結(jié)構(gòu)傳輸過程中 會(huì)傳遞整個(gè)對(duì)象的副本 傳輸中消耗內(nèi)存大 所以修改對(duì)原有對(duì)象不受影響*/");
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;
}
代碼運(yùn)行結(jié)果如下圖所示:

相關(guān)文章
C# 如何獲取出錯(cuò)的錯(cuò)誤所在行數(shù)信息
本文主要介紹 C# 中獲取錯(cuò)誤所在行的方法,在開發(fā)過程中或是用戶在使用過程中,出錯(cuò)的話方便我們快速定位到錯(cuò)誤的位置,以便我們處理。2016-04-04
c#linq里的Skip和Take實(shí)現(xiàn)分頁(yè)或遍歷
LINQ的優(yōu)勢(shì)在于它提供了一種直觀、類型安全的方式來操作各種類型的數(shù)據(jù),查詢常需要獲取一部分?jǐn)?shù)據(jù),為了實(shí)現(xiàn)這一功能,LINQ提供了Take?和Skip運(yùn)算符,Take運(yùn)算符用于從一個(gè)序列中返回指定個(gè)數(shù)的元素,Skip運(yùn)算符用于從一個(gè)序列中跳過指定個(gè)數(shù)的元素2024-01-01

