《C#高级编程》笔记系列第一弹-开篇
生活随笔
收集整理的這篇文章主要介紹了
《C#高级编程》笔记系列第一弹-开篇
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
????雖然以前做過(guò)的C#項(xiàng)目也不少了,做過(guò)ASP.NET的BS架構(gòu)的,也做過(guò)Winform的CS架構(gòu)。有一天一位同事給我們看了下面的一個(gè)簡(jiǎn)單的Demo:
????public?class?MainTest????{
????????static?void?Main(string[]?agrs)
????????{
????????????Book?book1?=?new?Book();//定義了一本書(shū)book1
????????????Book?book2?=?new?Book();//定義了一本書(shū)book2
????????????book1.Name?=?"C#高級(jí)編程";//book1的名字叫C#高級(jí)編程
????????????book2.Name?=?"C#高級(jí)編程";//book2的名字也叫C#高級(jí)編程
????????????Console.WriteLine(book1?==?book2);//問(wèn)boo1和book2是否為同一本書(shū)?
????????}
????};
????class?Book
????{
????????private?string?name?=?string.Empty;
????????public?string?Name
????????{
????????????get?{?return?name;?}
????????????set?{?name?=?value;?}
????????}
????};
????上面的輸出結(jié)果會(huì)是什么呢?有人說(shuō)兩本書(shū)都是<<C#高級(jí)編程>>啊,所以是同一個(gè)本書(shū)啦。其他人又有意見(jiàn)了,雖然名字相同,也不一定是同一本啊,我手里的和你手里的就不一樣啊。其實(shí)這是一個(gè)很簡(jiǎn)單的道理,就是關(guān)于值類型和引用類型的概念問(wèn)題。類屬于引用類型,當(dāng)我們new了不同的書(shū)時(shí),已經(jīng)在內(nèi)存中不同的地方創(chuàng)建了Book對(duì)象,當(dāng)我們比較兩本書(shū)時(shí),只是拿兩本書(shū)的引用地址來(lái)比較,這和C++的指針地址原理是一樣的,所以上面的比較結(jié)果會(huì)是FALSE。
????有人又有意見(jiàn)了,明明就是相同名字的書(shū),為什么說(shuō)他們不相等。對(duì),你的想法是沒(méi)有錯(cuò)誤,往往我們?cè)趯?shí)際做項(xiàng)目時(shí)需要有這樣的需求,即通過(guò)兩本書(shū)的名字相同就認(rèn)為是同一本書(shū),那我們應(yīng)該怎樣來(lái)實(shí)現(xiàn),讓上面的運(yùn)行結(jié)果為T(mén)RUE呢?這時(shí)候我們想到了運(yùn)用操作符重載,因此,我們?cè)贐ook類中添加下面的方法: public?static?bool?operator?==(Book?b1,Book?b2)
{
????if?(b1.Name?==?b2.Name)
????????return?true;
????else
????????return?false;
} ????好了,咱們編譯一下,嗯?居然編不過(guò)?看提示,原來(lái)當(dāng)我們定義了==的重載方法時(shí),就必須相應(yīng)的定義!=的重載方法: public?static?bool?operator?!=(Book?b1,?Book?b2)
{
????if?(b1.Name?==?b2.Name)
????????return?false;
????else
????????return?true;
} ????OK,編譯,運(yùn)行,結(jié)果為T(mén)RUE。其實(shí)這是一個(gè)非常簡(jiǎn)單的問(wèn)題,而常常有人在使用的時(shí)候誤以為兩個(gè)類的屬性相等時(shí)值也相等,由于這個(gè)小小的概念的問(wèn)題,也許會(huì)造成非常嚴(yán)重的后果。這都是關(guān)于值類型和引用類型的理解誤差。再來(lái)看下面一個(gè)Demo: static?void?Main(string[]?agrs)
{
????Book?book1?=?new?Book();//定義了一本書(shū)book1
????Book?book2?=?new?Book();//定義了一本書(shū)book2
????book1.Name?=?"C#高級(jí)編程";//book1的名字叫C#高級(jí)編程
????book1?=?book2;//將兩本書(shū)認(rèn)為是相同的一本書(shū)
????book2.Name?=?"C#入門(mén)經(jīng)典";//由于某些原因book2名字改了
????Console.WriteLine(book1.Name);//問(wèn)boo1還是原來(lái)的那本C#高級(jí)編程嗎?
} ????其實(shí)答案不需要我來(lái)解釋了。我費(fèi)了很大的勁去說(shuō)明一個(gè)很簡(jiǎn)單的引用類型的問(wèn)題,很多牛人也有意見(jiàn)了。嗯,其實(shí)我想要表達(dá)的是,即便我們能夠很熟練的使用C#一門(mén)語(yǔ)言,可以用它來(lái)開(kāi)發(fā)很多的項(xiàng)目,但我們同時(shí)也不能丟掉了一些非常基礎(chǔ)的東西,當(dāng)我們熟練的去開(kāi)發(fā)過(guò)了N多的項(xiàng)目,我們有沒(méi)有捫心自問(wèn)一下,我們對(duì)C#到底了解有多少?
????我并非計(jì)算機(jī)專業(yè)的學(xué)生,也沒(méi)有學(xué)習(xí)過(guò)計(jì)算機(jī)專業(yè)的任何課程,甚至連C語(yǔ)言的課程都沒(méi)有學(xué)過(guò)。我在大學(xué)的專業(yè)是土木工程,編程語(yǔ)言只學(xué)過(guò)Fortrun。數(shù)據(jù)結(jié)構(gòu),算法,編譯原理,軟件工程等我都不曾涉足,但憑借我半路出家的熱情以及無(wú)限的興趣,使我在應(yīng)用那些編程語(yǔ)言時(shí)得心應(yīng)手,VB,C++,C#都做過(guò),項(xiàng)目也做過(guò)一些。在如何運(yùn)用這些編程語(yǔ)言進(jìn)行項(xiàng)目開(kāi)發(fā)的問(wèn)題上,我絕對(duì)不比一個(gè)計(jì)算機(jī)專業(yè)出來(lái)的學(xué)生差。但是,是不是就能丟掉這些基礎(chǔ)的東西呢?答案是肯定的,不能。聽(tīng)說(shuō)很多的編程牛人都不是計(jì)算機(jī)專業(yè)出生,這同時(shí)也極大的增加了我的信心,我要努力的把我漏下的基礎(chǔ)的東西補(bǔ)上,從一個(gè)雜牌軍走上正統(tǒng)軍的道路。呵呵~所以,我的<<C#高級(jí)編程>>筆記系列由此而來(lái),希望以后大家多多支持!:)
轉(zhuǎn)載于:https://www.cnblogs.com/coderzh/archive/2007/09/22/902626.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的《C#高级编程》笔记系列第一弹-开篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SpringCloud微服务:基于Nac
- 下一篇: 开发指南专题五:JEECG微云快速开发平