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