扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 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());}}

程序运行结果如下图所示

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

小例子学习C#扩展方法相关推荐

  1. Qt小例子学习52 - 卡片游戏

    Qt小例子学习52 - 卡片游戏 Card.qml import QtQuick 2.0 import QtQuick.Layouts 1.3Item {id: cardLayout.fillWidt ...

  2. Qt 小例子学习33 - QTableWidget 显示点击的行列

    Qt 小例子学习33 - QTableWidget 显示点击的行列 #include <QApplication> #include <QDebug> #include < ...

  3. Qt 小例子学习26 - 画网格

    Qt 小例子学习26 - 画网格 GraphicsScene.h #ifndef GRAPHICSSCENE_H #define GRAPHICSSCENE_H#include <QGraphi ...

  4. Qt 小例子学习44 - 磁贴界面

    Qt 小例子学习44 - 磁贴界面 FormModel.h #ifndef FORMMODEL_H #define FORMMODEL_H#include <QAbstractListModel ...

  5. Qt 小例子学习8 - 选择器

    Qt 小例子学习7 - 选择器 dialog.cpp #include "dialog.h" #include "ui_dialog.h"#include &l ...

  6. 关于MSSQL存储过程中使用游标的一个小例子(学习)

    声明:本例转自http://hi.chinaunix.net/?214950/viewspace-1713,主要是为了学习之用 比如有个表,内容如下 id,text 1,春花秋月何时了 2,往事知多少 ...

  7. 设置中文环境_我花几年时间找到的学习中文好方法,值得你一看

    最近挺多朋友问关于我家小C是如何学习中文汉字的,其实我也一直挺想写这方面的内容的,但真的是很纠结.说起这个过程,就是一把眼泪一把鼻涕的辛酸,因为对于海外党来说,学中文真的是太艰辛了! 在孩子学习中文过 ...

  8. C#中的扩展方法学习总结

      版权声明:本文由秦元培创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处,本文作者为秦元培,本文标题为C#中的扩展方法学习总结,本文 ...

  9. 重学Java(007)—— Java基础知识(方法的练习,三个小例子、总结方法的注意事项)

    在经过方法的基础学习之后,我们通过三个小例子巩固一下知识,此外,也对方法的注意事项进行一个简单的总结. 一.三个小例子练习 题目:定义一个方法用来判断两个数字是否相同 首先我们明确方法的三要素: 返回 ...

最新文章

  1. php 安装curl init,linux下为php添加curl扩展的方法及curl_init函数用法案例详解
  2. python汉诺塔问题输入层数输出整个移动流程_python实现汉诺塔方法汇总
  3. could not open C:\Program Files\Java\jdk1.6.0-11\lib\i386\jvm.cfg
  4. Python标准库collections中与字典有关的类
  5. python制作一个桌面小工具
  6. oracle sql core目录,oracle11g数据库常见故障处理.ppt
  7. ATT拟854亿美元收购时代华纳 国内运营商坐不住了
  8. Django 分页 以及自定义分页
  9. c语言 turbo,C语言Turbo C 2.0内容介绍
  10. Python max函数中key的用法
  11. Lenovo Quick Fix 联想智能解决工具
  12. 图像传感器设计资料-764-GSPRINT4502 2MP-4.5微米 全局快门 高速 CMOS 图像传感器
  13. 什么是服务器的上行带宽和下行带宽
  14. SequoiaDB分布式数据库2021.12月刊
  15. 直播美颜SDK从技术层面如何自行实现
  16. VC中.pch是什么文件,没有.pch文件怎么办
  17. C语言常用库函数实现(一)_内存拷贝
  18. Splendor宝石游戏的策略分析
  19. 计算机系统中时间周期的单位,时间单位换算 (全),计算机单位换算大全
  20. 计算机二级字处理题根据参考样式,全国计算机等级考试二级officeword字处理题目...

热门文章

  1. windows和Linux文件路径分隔符的不同及获取
  2. 基于主机的入侵检测优缺点_如何建立我们的网络防线?入侵检测,确保我们的网络安全...
  3. mysql 排序字段索引吗_Mysql 排序优化与索引使用(转)
  4. wxpython 文本框TextCtrl
  5. Codeforces Round #480 (Div. 2) B. Marlin
  6. Canvas--圆弧和圆
  7. Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)
  8. 好吧,如果一定要RESTFUL的DJANGO
  9. 金蝶工业老单单据的相关表
  10. 分享我的Windows live writer 使用经验