现在的位置: 首页 > 综合 > 正文

小例子学习C#扩展方法

2013年04月28日 ⁄ 综合 ⁄ 共 1816字 ⁄ 字号 评论关闭

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。为了更好的理解,我写了一个小程序,希望对初学的朋友有所帮助。

首先我建立了一个控制台用用程序,然后建立了一个名为MyClassLibrary的类库,类库里就写了一个Book类。如下图所示

image

在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());
        }
    }

程序运行结果如下图所示

image

这个例子并没有什么意义,简单理解,扩展方法就是向已有的类型中添加新的方法。

抱歉!评论已关闭.