1. 程式人生 > >精通MVC 5 學習筆記 =========拓展方法

精通MVC 5 學習筆記 =========拓展方法

前面的物件初始化器和快捷屬性如下一直在用,沒什麼好說的,一逼跳過:

  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 類 親生的一樣 直接 . 就可以了 

結果:

總結: 拓展方法不會打破,類的方法,欄位,和屬性的訪問規則,可以適用拓展方法來拓展類的功能 ,但是隻能使用有權訪問的類成員