前面的对象初始化器和快捷属性如下一直在用,没什么好说的,一逼跳过:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
}
cart.Products = new List<Product>()
{
new Product() { Price = 100, Name = "洗洁精" },
new Product() { Price = 300, Name = "香皂" },
new Product() { Price = 400, Name = "泡面" },
new Product() { Price = 500, Name = "大米" },
};
今天的重点是拓展方法 (Extension Method)--多记一下单词提升一下逼格
在开发过程中用很多的类,例如放到.dll文件中的,我们看不见class中的具体情况,只能知道成员,这个时候想要在这个类中添加拓展方法怎么办呢,看到还有这样的操作,感觉好厉害:
示例:
代表 .dll 文件中的 类 :
public class ShoppingCart
{
public List<Product> Products;
}
类中用到的实体类:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
}
现在需要对 购物车类进行添加 拓展方法计算总价 :怎么办 --->不能直接修改 ShoppingCart的情况下
只需要这样:
public static class ExtensionCatr
{
public static decimal TotalPrice(this ShoppingCart cart)
{
decimal total = 0;
foreach (var item in cart.Products)
{
total += item.Price;
}
return total;
}
}
注意: 拓展方法所在的类,只能是静态类==>导致方法也就只能是静态方法
添加一个静态类 ,再添加一个静态方法 : 方法名什么的都不重要 : 重要的在于 参数 this ShoppingCart cart
如果没用this 关键字 也是可以实现的,但是那就不叫拓展方法了 ,使用方法会变成这样:
var totalPrice = ExtensionCatr.TotalPrice(cart);
那我还费什么劲,之所以要记录一下拓展方法,就是因为它高大上呀: 添加this之后 ,就是见证奇迹的时候:
控制器:
public class HomeController : Controller
{
// GET: Home
public string Index()
{
var cart = new ShoppingCart();
cart.Products = new List<Product>()
{
new Product() { Price = 100, Name = "洗洁精" },
new Product() { Price = 300, Name = "香皂" },
new Product() { Price = 400, Name = "泡面" },
new Product() { Price = 500, Name = "大米" },
};
var total = cart.TotalPrice();
return "总价:" +total+ "元";
}
}
}
看到了吗:这里的TotalaPrice 方法就像是 ShoppingCart 类 亲生的一样 直接 . 就可以了
结果: