扩展方法(Extension Method)是给那些不是你拥有、因而不能直接修改的类添加方法的一种方便的办法。

一、使用扩展方法

1、定义一个购物车的类-ShoppingCart

 using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public class ShoppingCart:IEnumerable<Product>
{
public List<Product> Products { get; set; } }
}

2、定义一个扩展方法

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public static class MyExtensionMethods
{
public static decimal TotalPrices(this ShoppingCart cartParam)
{
decimal total = ;
foreach (Product prod in cartParam.Products)
{
total += prod.Price;
}
return total;
} }
}

this 关键字把TotalPrices定义为一个扩展方法 ShoppingCart 告诉。net 这个扩展方法运用与那个类

3、运用扩展方法

 public ViewResult UserExtension()
{
//创建并填充ShoppingCart
ShoppingCart cart = new ShoppingCart
{
Products = new List<Product>{
new Product{Name="kayak",Price=275M},//皮划艇
new Product{Name="Lifejacket",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Price=19.50M},//足球
new Product{Name="Corner flag",Price=34.95M}//角旗
}
};
//求去购物车中的产品总价
decimal cartTotal = cart.TotalPrices();
return View("Result", (object)String.Format("Total:{0:c}", cartTotal));
}

4、结果展示

 二、对接口运用扩展方法

1、在ShoppingCart类中实现接口

 using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public class ShoppingCart:IEnumerable<Product>
{
public List<Product> Products { get; set; }
public IEnumerator<Product> GetEnumerator()
{
return Products.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}

2、在接口上工作的扩展方法

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public static class MyExtensionMethods
{ public static decimal TotalPrices(this IEnumerable<Product> productEnum)
{
decimal total=;
13 foreach(Product prod in productEnum)
14 {
15 total += prod.Price;
}
return total;
}
}
}

3、将扩展方法运用于同一接口的不同实现

  public ViewResult UseExtensionEnumerable()
{
IEnumerable<Product> products = new ShoppingCart
{
Products = new List<Product>{
new Product{Name="kayak",Price=275M},//皮划艇
new Product{Name="Lifejacket",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Price=19.50M},//足球
new Product{Name="Corner flag",Price=34.95M}//角旗
}
};
Product[] productArary ={
new Product{Name="kayak",Price=375M},//皮划艇
new Product{Name="Lifejacket",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Price=19.50M},//足球
new Product{Name="Corner flag",Price=34.95M}//角旗
};
//获取购物车中的产品总价
decimal cartTotal = products.TotalPrices();
//获取数组中产品的总价
decimal arrayTotal = productArary.TotalPrices();
return View("Result",(object)String.Format("Cart Total:{0},Array Total:{1}",cartTotal,arrayTotal));
}

4、结果展示

三、创建过滤扩展方法

1、

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public static class MyExtensionMethods
{
public static IEnumerable<Product> FilterByCategory(this IEnumerable<Product> productEnum, string categoryParm)
{
foreach (Product prod in productEnum)
{
if (prod.Category == categoryParm)
{
yield return prod;
}
}
}
}
}

2、使用过滤扩展方法

 public ViewResult UseFilterExtensionMethod()
{
IEnumerable<Product> products = new ShoppingCart
{
Products = new List<Product>{
new Product{Name="kayak",Category="Watersports",Price=375M},//皮划艇
new Product{Name="Lifejacket",Category="Watersports",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Category="Soccer",Price=19.50M},//足球
new Product{Name="Corner flag",Category="Soccer",Price=34.95M}//角旗
}
};
decimal total = ;
foreach (Product prod in products.FilterByCategory("Soccer"))
{
total += prod.Price;
}
return View("Result",(object)String.Format("Total:{0}",total));
}

3、结果展示

只用Soccer分类中的价格被返回累加出来。

MVC 中使用扩展方法的更多相关文章

  1. ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法

    https://blog.csdn.net/qq_21419015/article/details/80433640 1.示例项目准备1)项目创建新建一个项目,命名为LanguageFeatures ...

  2. Enum扩展及MVC中DropDownListFor扩展方法的使用

    public enum SearchState { /// <summary> /// 全部 /// </summary> [Description("全部" ...

  3. mvc给html扩展方法:

    mvc给html扩展方法: 注意:扩展方法和所在的类都必须是 public static如果在页面直接使用新扩展的方法,需要web.config里把Web.Helper名称命名空间加上,页面才能访问到 ...

  4. Mvc 分页栏扩展方法

    using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Sy ...

  5. C#3.0中的扩展方法

    在实际应用中,开发者完成代码的编译后,除非重新编译更改后的代码,否则开发者很难在原有代码中添加新的功能. 在C#3.0中,提供了一个扩展方法的新特性,可以使得开发者在编译后的程序集里边添加相关的方法, ...

  6. 记录C#中的扩展方法

    C#中的扩展方法. 系统自带的类型,我们无法去修改: 修改源代码需要较大的精力,而且可能会带来错误: 我们只是需要一个或者较少的几个方法,修改源代码费时费力: 被扩展的类是sealed的,不能被继承: ...

  7. C#编程(六十一)------------LINQ中的扩展方法

    原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...

  8. objective-C中的扩展方法与partial class

     在c#中要扩展一个现有类非常easy,比方这样: ? 1 2 3 4 5 6 7 public static class Utils {     public static void PrintTo ...

  9. C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)

    C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

随机推荐

  1. 提高Asp.Net应用程序性能的十大方法(译感)

    译完了提高Asp.Net应用程序的十大方法这篇文章,仔细想其中提到的每一条,在这里结合我的项目来谈谈.第一条:返回多个结果集因为我的项目中所有对数据库的访问的sql语句都是通过调用存储过程实现的,所以 ...

  2. Sqli-labs less 51

    Less-51 本关的sql语句为    $sql="SELECT * FROM users ORDER BY '$id'"; 我们此处要进行stacked injection,要 ...

  3. Sqli-labs less 61

    Less-61 此处对于id处理还是有点奇葩的,第一次遇到利用两层括号的.(可能我头发比较长,见识短了).形式和上述是一样的 payload: http://127.0.0.1/sqli-labs/L ...

  4. BZOJ1191: [HNOI2006]超级英雄Hero

    这题标解是改一下匈牙利算法,显然,像我这种从不用匈牙利的人,会找个办法用网络流… 具体做法是这样,二分最后的答案ans,然后对前ans个问题建图跑网络流,看最大流能不能到ans. /********* ...

  5. python模拟shell

    import fileinput import readline raw_input(xxx) exec filepinput.input

  6. HDU2295 Radar (DLX)

    下面的代码99%参考了这个网站http://www.cnblogs.com/183zyz/archive/2011/08/07/2130193.html 人生的第一道DLX肯定是需要作一些参考的啦. ...

  7. KMP模板,最小循环节

    (可以转载,但请注明出处!) 下面是有关学习KMP的参考网站 http://blog.csdn.net/yaochunnian/article/details/7059486 http://blog. ...

  8. Freebie: Material Design UI Kit

    点这里 Following the guidelines laid out by Google, this free UI kit has been designed so that you can ...

  9. Peer certificate cannot be authenticated with known CA certificates.

    I was trying to post to a webservice and was getting the 60 error code: Peer certificate cannot be a ...

  10. hdu 4726 Kia's Calculation

    思路:刚开始想复杂了. 看解题报告后才知道这题挺简单的,看来还是要多训练啊!!! 单独处理首位的数字,不能为0.其他的就好处理了,从大到小依次找下去就可以了…… 代码如下: #include<i ...