精通MVC 5 學習筆記 =========拓展方法
阿新 • • 發佈:2018-11-10
前面的物件初始化器和快捷屬性如下一直在用,沒什麼好說的,一逼跳過:
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 類 親生的一樣 直接 . 就可以了
結果: