日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

類是數(shù)據(jù)類型,對(duì)象是內(nèi)存的具體分配

系統(tǒng) 1911 0

對(duì)于初學(xué)面向?qū)ο蟮娜藖?lái)說(shuō),往往很疑惑什么是對(duì)象,什么是類。在面向?qū)ο蟮木幊填I(lǐng)域中,我們需要明確一個(gè)事實(shí):所有的類型必須被明確的表示,而不是被其他數(shù)據(jù)類型來(lái)替代。

類是 C# 中功能最為強(qiáng)大的數(shù)據(jù)類型,它定義了數(shù)據(jù)類型的數(shù)據(jù)和行為。然后,程序員可以創(chuàng)建作為此類的實(shí)例的對(duì)象。類支持繼承,而繼承是面向?qū)ο缶幊痰幕A(chǔ)部分。

比如我們?cè)谇懊媪私獾囊粋€(gè)關(guān)于洗牌的過(guò)程,在前面的代碼中,我們計(jì)算和產(chǎn)生的不是真正意義上的撲克牌,而是字符串!

如果要真正的描述撲克牌,我們必須要有一個(gè)撲克牌的數(shù)據(jù)類型,而這個(gè)類型.NET Framework顯然沒(méi)有提供,因此我們需要自己編寫(xiě)一個(gè)撲克牌的類型。所以我們需要定義一個(gè)撲克牌的類型,我們把自己定義的類型一般稱為類。

/// <summary>

/// 撲克牌

/// </summary>

public class Poker

{

/// <summary>

/// 撲克牌的花色

/// </summary>

public string Style;

/// <summary>

/// 撲克排的牌面

/// </summary>

public string Title;

/// <summary>

/// 撲克牌的值

/// </summary>

public int Value;

}

上述代碼描述我們使用關(guān)鍵字class定義了一個(gè)類,該類的名字叫Poker。這個(gè)類中定義了3個(gè)變量:Style、Title和Value。

class 關(guān)鍵字前面是訪問(wèn)級(jí)別。由于在該例中使用 public,因此任何人都可以基于該類創(chuàng)建對(duì)象。類的名稱位于 class 關(guān)鍵字的后面。定義的其余部分是類的主體,用于定義行為和數(shù)據(jù)。類的字段、屬性、方法和事件統(tǒng)稱為“類成員”。

要使用這個(gè)類,我們需要對(duì)其實(shí)例化。所謂的實(shí)例化,說(shuō)白了就是通知編譯器到內(nèi)存中開(kāi)辟一個(gè)空間,以存儲(chǔ)一些值。通過(guò)使用 new 關(guān)鍵字(后跟對(duì)象將基于的類的名稱)可以創(chuàng)建對(duì)象:

Poker pokerA = new Poker(); //實(shí)例化Poker類

Poker pokerK = new Poker(); //實(shí)例化Poker類

創(chuàng)建類的實(shí)例后,將向程序員傳遞回對(duì)該對(duì)象的引用。在前面的示例中,pokerA和pokerK是對(duì)基于 Poker的對(duì)象的引用。此引用引用新對(duì)象,但不包含對(duì)象數(shù)據(jù)本身。

static void Main(string[] args)

{

Poker pokerA = new Poker(); //實(shí)例化Poker類

pokerA.Style = ((char)4).ToString();

pokerA.Title = "A";

pokerA.Value = 1;

System.Console.WriteLine("{0}{1}", pokerA.Style, pokerA.Title);

Poker pokerK = new Poker(); //實(shí)例化Poker類

pokerK.Style = ((char)4).ToString();

pokerK.Title = "K";

pokerK.Value = 13;

System.Console.WriteLine("{0}{1}", pokerK.Style, pokerK.Title);

}

我們得到的結(jié)果如圖3.3.1:

clip_image002

圖3.3.1

Poker pokerA = new Poker()和Poker pokerK = new Poker()代碼用以產(chǎn)生一個(gè)實(shí)例化Poker對(duì)象。通俗的說(shuō)就是,通知編譯器,我需要一個(gè)新的空間,這個(gè)空間請(qǐng)按Poker類的定義來(lái)分配空間,并且命名為pokerA或pokerK。而Style、Title和Value是Poker類的值,存儲(chǔ)了Poker具體的內(nèi)容。

如果要比較兩張牌對(duì)象有兩種方案:

一、比較兩張牌對(duì)象是不是在同一個(gè)內(nèi)存空間,如果是的話,這兩個(gè)對(duì)象完全相等。

二、比較兩張牌對(duì)象的值是不是各自相等,如果是的話,表示這兩張牌的值或牌面一樣。

static void Main(string[] args)

{

Poker pokerA1 = new Poker(); //實(shí)例化Poker類

pokerA1.Style = ((char)4).ToString();

pokerA1.Title = "A";

pokerA1.Value = 1;

System.Console.WriteLine("{0}{1}", pokerA1.Style, pokerA1.Title);

Poker pokerA2 = new Poker(); //實(shí)例化Poker類

pokerA2.Style = ((char)4).ToString();

pokerA2.Title = "A";

pokerA2.Value = 1;

System.Console.WriteLine("{0}{1}", pokerA2.Style, pokerA2.Title);

System.Console.WriteLine(pokerA1 == pokerA2); //在兩個(gè)內(nèi)存空間中,兩個(gè)對(duì)象不相等

System.Console.WriteLine(pokerA1.Value == pokerA2.Value);// 兩張牌的值相等

}

運(yùn)行的結(jié)果如圖3.3.2:

clip_image004

圖3.3.2

初學(xué)者很不了解對(duì)象的相等和對(duì)象的值相等是什么意思,用一個(gè)通俗的場(chǎng)景來(lái)說(shuō),有兩個(gè)雙胞胎兄弟,長(zhǎng)的是一模一樣,它們的衣服值一樣,它們的外觀值一樣,它們的所有的一切的值都一樣,但它們就是兩個(gè)人,而不能說(shuō)是同一個(gè)人。

而筆者名字叫“王豫翔”,在QQ的昵稱上叫“熾天使”,MSN叫“害羞的獅子王”,但其實(shí)都是同一個(gè)人。

以下代碼描述了兩個(gè)對(duì)象相等,初學(xué)者要牢記,如果兩個(gè)對(duì)象相等,任意的對(duì)象改變的值,會(huì)影響另一個(gè)對(duì)象的值,因?yàn)樗鼈兪褂玫氖枪餐膬?nèi)存。

static void Main(string[] args)

{

Poker pokerA1 = new Poker(); //實(shí)例化Poker類

pokerA1.Style = ((char)4).ToString();

pokerA1.Title = "A";

pokerA1.Value = 1;

System.Console.WriteLine("{0}{1}", pokerA1.Style, pokerA1.Title);

Poker pokerA2 = new Poker(); //實(shí)例化Poker類

pokerA2 = pokerA1; //將pokerA1的內(nèi)存空間的地址賦值給pokerA2

System.Console.WriteLine(pokerA1 == pokerA2);

System.Console.WriteLine(pokerA1.Value == pokerA2.Value);

pokerA2.Style = ((char)5).ToString(); //pokerA2改變了花色

System.Console.WriteLine("{0}{1}", pokerA1.Style, pokerA1.Title); //pokerA1的花色值也改變了

}

觀察圖3.3.3結(jié)果,并理解對(duì)象的引用關(guān)系。

clip_image006

圖3.3.3

初學(xué)者注意

出現(xiàn)上述原因是應(yīng)為C#的數(shù)據(jù)類型分為:值類型和引用類型。對(duì)象是引用類型。具體的細(xì)節(jié)在后面我們將逐步介紹,稍安毋躁。

類是數(shù)據(jù)類型,對(duì)象是內(nèi)存的具體分配


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 达州市| 麦盖提县| 库伦旗| 赤城县| 丘北县| 长沙市| 务川| 青浦区| 大英县| 稻城县| 石嘴山市| 巴林左旗| 乌鲁木齐市| 彰化县| 武冈市| 鸡西市| 洱源县| 连山| 邓州市| 芜湖市| 桃园县| 新宁县| 陈巴尔虎旗| 深泽县| 昭觉县| 乌拉特前旗| 镇雄县| 潞城市| 诏安县| 昭觉县| 新龙县| 邛崃市| 双江| 青河县| 成安县| 福泉市| 南充市| 丽江市| 湖南省| 和硕县| 舞钢市|