您好,登錄后才能下訂單哦!
C# for Unity編程語言快速入門教程(連載13)_C#結(jié)構(gòu)體
C#的“結(jié)構(gòu)體”使用Struct 關(guān)鍵字來定義,是與“類”、"接口"并列的編程單位。其設(shè)計的主要目的是自定義“值類型”,即允許用戶自定義值類型。
適用范圍:
結(jié)構(gòu)適合一些小型的數(shù)據(jù)結(jié)構(gòu),這些結(jié)構(gòu)包含的數(shù)據(jù)以創(chuàng)建后不修改的數(shù)據(jù)為主。也適合數(shù)據(jù)打包,一次性定義多個變量。
結(jié)構(gòu)體的限制很多。
1> 除非字段聲明為const 、static,否則無法初始化。
2> 結(jié)構(gòu)體沒有默認的構(gòu)造函數(shù)。
3> 結(jié)構(gòu)體可以聲明帶參數(shù)的構(gòu)造函數(shù)。
4> 結(jié)構(gòu)不能繼承。
5> 結(jié)構(gòu)體在賦值時候進行復(fù)制。
6> 結(jié)構(gòu)體實例化可以不使用New 運算符。
7> 結(jié)構(gòu)可以實現(xiàn)接口。
8> 結(jié)構(gòu)體使用時,可以New ,也可以不New. 如果不New ,則使用前必須為結(jié)構(gòu)體中所有的成員變量賦值。
對于C#初學者來說,對于結(jié)構(gòu)體是不好區(qū)分的,現(xiàn)就結(jié)構(gòu)體與類的主要區(qū)別總結(jié)如下:
1> 如果你需要用面向?qū)ο蟮奶匦裕仨氂妙悺?/p>
2> 成員變量很多的時候,必須用類。
3> 類與結(jié)構(gòu)體的最大區(qū)別是:“類" 是引用類型,所以類的實例對象是按照“引用傳值”,而"結(jié)構(gòu)"類型是值類型,所以結(jié)構(gòu)實例對象是按“值類型傳值”。
為了更好的說明類與結(jié)構(gòu)的異同點,現(xiàn)提供如下代碼,供大家學習討論:
class Program
{
public void ChangeValues_1(int intNum)
{
intNum = 100;
}
/// <summary>
/// 測試類對象傳值(引用)
/// </summary>
/// <param name="pc"></param>
public void ChangeValues_2(PointClass pc)
{
pc.PointX = 1000;
pc.PointY = 1100;
}
/// <summary>
/// 測試結(jié)構(gòu)體傳值(拷貝)
/// </summary>
/// <param name="ps"></param>
public void ChangeValues_3(PointStruct ps)
{
ps.PointX = 2000;
ps.PointY = 2200;
}
static void Main(string[] args)
{
/* 引出學習案例(系統(tǒng)的“點”) */
//Point firstPoint = new Point();
//firstPoint.X = 10;
//firstPoint.Y = 20;
/*類與結(jié)構(gòu)體 不同點測試 */
//引用類型
PointClass pc = new PointClass(10,20);
//值類型
PointStruct ps = new PointStruct(50,60); //寫法1
//寫法2:特別注意,在使用結(jié)構(gòu)中的方法或者屬性前,
//必須顯式的給結(jié)構(gòu)的字段賦值,否則必須用New.
PointStruct ps2;
ps2._PointX = 23;
ps2._PointY = 88;
Program obj = new Program();
int intTestNum = 50;
obj.ChangeValues_1(intTestNum);
Console.WriteLine("Number=" + intTestNum);
//結(jié)果表明:引用類型,在方法中發(fā)生的變化,對結(jié)果造成的影響
obj.ChangeValues_2(pc);
Console.WriteLine("pc.pointX={0},pointY={1}",pc.PointX,pc.PointY);
obj.ChangeValues_3(ps);
Console.WriteLine("ps.pointX={0},pointY={1}", ps.PointX, ps.PointY);
}
}
//定義的類
class PointClass
{
private int _PointX;
private int _PointY;
public int PointX
{
get { return _PointX; }
set { _PointX = value; }
}
public int PointY
{
get { return _PointY; }
set { _PointY = value; }
}
public PointClass(int px, int py)
{
_PointX = px;
_PointY = py;
}
}
//定義的結(jié)構(gòu)體
struct PointStruct
{
public int _PointY;
public int _PointX;
public int PointX
{
get { return _PointX; }
set { _PointX = value; }
}
public int PointY
{
get { return _PointY; }
set { _PointY = value; }
}
public PointStruct(int px, int py)
{
_PointX = px;
_PointY = py;
}
}
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。