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 }

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

原文地址:https://www.cnblogs.com/canyuexingchen/p/2985425.html