天天看點

《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)

    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#進階程式設計>>筆記系列由此而來,希望以後大家多多支援!:)

本文轉自CoderZh部落格園部落格,原文連結:http://www.cnblogs.com/coderzh/archive/2007/09/22/902626.html,如需轉載請自行聯系原作者

繼續閱讀