小例子學習C#擴充方法

來源:互聯網
上載者:User

擴充方法使您能夠向現有類型“添加”方法,而無需建立新的衍生類別型、重新編譯或以其他方式修改原始類型。 擴充方法是一種特殊的靜態方法,但可以像擴充類型上的執行個體方法一樣進行調用。 對於用 C# 和 Visual Basic 編寫的用戶端代碼,調用擴充方法與調用在類型中實際定義的方法之間沒有明顯的差異。為了更好的理解,我寫了一個小程式,希望對初學的朋友有所協助。

首先我建立了一個控制台用用程式,然後建立了一個名為MyClassLibrary的類庫,類庫裡就寫了一個Book類。如所示

在Book類中,我定義了Id,Title,Price,Publisher四個屬性,分別表示書的編號,名稱,價格和出版社。同時,還寫了一個GetBookInfo方法,用於擷取書的資訊。

Book類的代碼如下

namespace MyClassLibrary{    public class Book    {        /// <summary>        /// 編號        /// </summary>        public string Id { get; set; }        /// <summary>        /// 書名        /// </summary>        public string Title { get; set; }        /// <summary>        /// 價格        /// </summary>        public decimal Price { get; set; }        /// <summary>        /// 出版社        /// </summary>        public string Publisher { get; set; }        public Book()            : this(string.Empty, string.Empty, decimal.Zero, string.Empty)        {        }        public Book(string id, string title)            : this(id, title, decimal.Zero, string.Empty)        {        }        public Book(string id, string title, decimal price, string publisher)        {            this.Id = id;            this.Title = title;            this.Price = price;            this.Publisher = publisher;        }        /// <summary>        /// 擷取書籍資訊        /// </summary>        public string GetBookInfo()        {            return string.Format("編號:{0} 書名:{1} 價格:{2} 出版社:{3}", Id, Title, Price, Publisher);        }    }}

下面我們在測試程式中執行個體化一個Book類的對象,在Book類中我們已經定義了一個方法GetBookInfo,通過調用這個方法就可以取得書的資訊。但是,正好有一天書店要搞活動,這本書要打五折,我們就要修改書的價格,但是在給定的Book類中並沒有提供修改書價格的方法,怎麼辦呢?對,擴充方法就是一個解決的辦法。

我們為Book類寫一個修改書價格的擴充方法ModifyPrice。代碼如下:

    public static class BookExtension    {        /// <summary>        /// 修改書的價格        /// </summary>        /// <param name="book">book對象</param>        /// <param name="price">價格</param>        public static void ModifyPrice(this Book book, decimal price)        {            book.Price = price;        }    }

測試程式碼為:

 class Program    {        static void Main(string[] args)        {            //Book book = new Book("20110711", "紅樓夢", 79.00m, "北京出版社");            Book book = new Book { Id = "20110711", Title = "紅樓夢", Price = 79.00m, Publisher = "北京出版社" };            Console.WriteLine("書籍資訊:");            Console.WriteLine(book.GetBookInfo());            Console.WriteLine("今天搞活動,本書打五折");            book.ModifyPrice(book.Price * 0.5m);            Console.WriteLine(book.GetBookInfo());        }    }

程式運行結果如所示

這個例子並沒有什麼意義,簡單理解,擴充方法就是向已有的類型中添加新的方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.