(C# MVC(1))扩展方法
扩展方法是给那些不是你拥有的、因而不能直接修改的类添加方法的一种方便的方法,下面就来演示如何使用扩展方法:
首先 我们在Models文件夹中创建一个Product类,代码如下:
1 using System; 2 using System.Collection.Generic; 3 using System.Linq; 4 using System.Web; 5 namespace MyProject.Models{ 6 public class Product{ 7 public Product() 8 {} 9 public int ProductID{get;set;} 10 public string Name{get;set;} 11 public string Description{get;set;} 12 public decimal Price{get;set;} 13 public string Category{get;set;} 18 } 19 }
然后我们在Models文件夹下再创建一个ShoppingCart类
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 namespace MyProduct.Models{ 6 public class ShoppingCart{ 7 public List<Product> Products {get;set;} 8 9 } 10 11 }
上面类很简单,第一个是封装了一个Product的Model,第二个封装了一个Product对象的列表。
接下来就是我们要做的事,我们要对ShoppingCart类中的Product对象求总值,但是我们不能对这个类进行修改,
这样我们就要用到扩展方法了,代码示例如下:
namespace MyProjec.Models{ public static class MyExtensionMethods{ public static decimal TotalPrices(this ShoppingCart carParam){ //这里的this很重要,它表示把TotalPrice标记为一个扩展方法,这个方法用于ShoppingCart类 decimal total=0; foreach(Product prod in cartParam.Products) { total+=prod.Price; } return total; } } }
那我们该如何调用这个扩展方法呢?下面我们会创建一个Controller 和View来展示这个实例。
首先我们创建一个Result视图:
@model String @{Layout=null;} <html> <Head> <meta name="viewport" content="width=device-width"/> <title>Result</title> </Head> <body> <div> @Model </div> </body> </html>
这个视图应该很好理解,是一个强类型视图,模型的类型是String。
接下来我们要创建一个Controller,就创建一个HomeController吧,代码如下:
using Myproject.Models;//这句必须添加,否则无法找到扩展方法,为什么,下面在做解释 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MyProject.Controllers{ public class HomeController:Controller{ public ViewResult Index(){ ShoppingCart cart =new ShoppingCart{ Products=new List<Product>{ new Product{Name="Desk",Price=275M}, new Product{Name="Ball",Price=19.50M}, new Product{Name="Pan",Price=48.95M}, new Product{Name="Keyword",Price=34.95M} } }; decimal cartTotal=cart.TotalPrice(); return View("Result",(object)String.Format("Total:{0:c}",cartTotal)); } } }
注意:如果不能调用TotalPrice方法,请确保扩展方法MyExtensionMethods在Models文件夹下,也就是你要和Product和ShoppingCart类在同一文件夹下,因为它们必须在同一个命名空间中才能被调用,否则是无法找到的。
显示结果为:Total:$378.40
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步