小例子学习C#扩展方法
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。为了更好的理解,我写了一个小程序,希望对初学的朋友有所帮助。
首先我建立了一个控制台用用程序,然后建立了一个名为MyClassLibrary的类库,类库里就写了一个Book类。如下图所示
在Book类中,我定义了Id,Title,Price,Publisher四个属性,分别表示书的编号,名称,价格和出版社。同时,还写了一个GetBookInfo方法,用于获取书的信息。
Book类的代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | 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; } } |
测试程序代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()); } } |
程序运行结果如下图所示
这个例子并没有什么意义,简单理解,扩展方法就是向已有的类型中添加新的方法。
作者:程序旅途
出处:https://www.cnblogs.com/nianming/archive/2011/07/11/2102990.html
版权:本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!