• C# 封装集合


    概述:封装集合就是把集合封装其他,只提供给调用端接口。其调用端不能任意修改集合,耦合性更加明确。

    我们在很多时候吧一些不必要的操作暴露给调用端,只需要给他们所需要的操作或数据就行,这样的叫做封装。下文是我们提供一个Ilist的集合,大家知道Ilist具有对集合的所有操作,这样提供给调用方会造成很多不必要的隐患,所以我们要重构 封装。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace SCADA.HMI.Windows
    {
       
       public class Order
       {
           private List<Orders> _orderses;
    
           private double _orderTotal;
    
           public Order(List<Orders> orderses)
           {
               _orderses = orderses;
           }
    
           public IList<Orders> Orderses
           {
               get
               {
                   return _orderses;
               }
           }
    
           public void Add(Orders _orders)
           {
               _orderTotal += _orders.OrderTotal;
               _orderses.Add(_orders);
           }
    
           public void Remove(Orders _orders)
           {
               _orders = _orderses.Find(o => o == _orders);
               if (_orders == null)
               {
                   return;
               }
               _orderTotal -= _orders.OrderTotal;
               _orderses.Remove(_orders);
           }
       }
    
        public class Orders
        {
            public double OrderTotal { get ; private set; }
        }

    我们要把Ilist换成IEnumerable,大家知道包括一个返回值为IEnumerator的GetEnumerator()方法,所以这样只能遍历取出它的值,而不能对这个集合进行改变。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace SCADA.HMI.Windows
     7 {
     8    
     9    public class Order
    10    {
    11        private List<Orders> _orderses;
    12 
    13        private double _orderTotal;
    14 
    15        public Order(List<Orders> orderses)
    16        {
    17            _orderses = orderses;
    18        }
    19 
    20        public IEnumerable<Orders> Orderses
    21        {
    22            get
    23            {
    24                return _orderses;
    25            }
    26        }
    27 
    28        public void Add(Orders _orders)
    29        {
    30            _orderTotal += _orders.OrderTotal;
    31            _orderses.Add(_orders);
    32        }
    33 
    34        public void Remove(Orders _orders)
    35        {
    36            _orders = _orderses.Find(o => o == _orders);
    37            if (_orders == null)
    38            {
    39                return;
    40            }
    41            _orderTotal -= _orders.OrderTotal;
    42            _orderses.Remove(_orders);
    43        }
    44    }
    45 
    46     public class Orders
    47     {
    48         public double OrderTotal { get
    49             ; private set; }
    50     }
    51 }

    总结:封装之后提供接口使得调用方与被调用方分离的更加明确,集合的改变使得调用方不会去操作被调用方内部集合,只能调用接口。

  • 相关阅读:
    大神没事接个活!
    帝国cms 后台账户密码都对,提示你还未登录!
    帝国cms 反馈时提示此信息反馈不存在
    帝国cms e:loop 文章编号标签
    eyoucms 首页以及列表页内容调用标题、关键词、描述
    eyoucms 点击下拉分类,没有分类的不切换代码
    eyoucms class类样式切换写法
    eyoucms if 判断显示或者隐藏
    eyoucms 调用搜索代码
    eyoucms 获取单页内容的代码
  • 原文地址:https://www.cnblogs.com/canyuexingchen/p/2985425.html
Copyright © 2020-2023  润新知