精通MVC 5 学习笔记 =========拓展方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36445227/article/details/81606835

前面的对象初始化器和快捷属性如下一直在用,没什么好说的,一逼跳过:

  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 类 亲生的一样 直接 . 就可以了 

结果:

总结: 拓展方法不会打破,类的方法,字段,和属性的访问规则,可以适用拓展方法来拓展类的功能 ,但是只能使用有权访问的类成员

猜你喜欢

转载自blog.csdn.net/qq_36445227/article/details/81606835