C#共通インタフェース学習ICollection

5900 ワード

C#共通インタフェース学習ICollection
作者:ウーロンハリー時間:2015-11-01プラットフォーム:Window 7 64 bit,Visual Studio Community 2015
参照先:
  • Microsoft Refernce Souce
  • MSDN
  • When to use IEnumerable, ICollection, IList and List

  • 章:
  • インタフェースICollection実装
  • 本文:
    まず、ICollectionのソースコードを見てみましょう.
    public interface ICollection<T> : IEnumerable<T>
    {
        int Count { get; }
        bool IsReadOnly { get; }
    
        void Add(T item);
        void Clear();
        bool Contains(T item);
        void CopyTo(T[] array, int arrayIndex);
        bool Remove(T item);
    }

     
    これらのインタフェースの方法を見て、ICollectionインタフェースはIEnumerableより多くのものを持っていると思います.もし私たちが簡単なforeachだけであれば、IEnumerableインタフェースを実現すれば十分です.しかし、要素の数を理解したり、削除要素を増やしたりするには、ICollectionインタフェースを実現するしかありません.
     
       class Fruit
        {
            public string Name;
            public int Price;
        }

     
    Boxクラスが上のFruitクラスの集合であると仮定すると、まずBoxクラスにListコンテナを置いて要素を配置し、その後、Boxクラス上でICollectionインタフェースを実現します.
        class Box : ICollection<Fruit>
        {
            public List<Fruit> _fruit = new List<Fruit>();
             public int Count
            {
                get {return _fruit.Count();}
            }
            public bool IsReadOnly
            {
                get {return false;}
            }
            public void Add(Fruit item)
            {
                _fruit.Add(item);
            }
    
            public void Clear()
            {
                _fruit.Clear();
            }
    
            public bool Contains(Fruit item)
            {
                return _fruit.Contains(item);
            }
    
            public void CopyTo(Fruit[] array, int arrayIndex)
            {
                _fruit.CopyTo(array,arrayIndex);
            }
    
            IEnumerator IEnumerable.GetEnumerator()
            {
                foreach(var f in _fruit) yield return f;
            }
    
            public IEnumerator<Fruit> GetEnumerator()
            {
                foreach (var f in _fruit) yield return f;
            }
    
            public bool Remove(Fruit item)
            {
                return _fruit.Remove(item);
            }
        }

     
    大きな塊の方法は私たちに空を埋めさせなければならない.実は私はすべてListの上で1つの包装をカバーしたと感じて、実質的な実現はすべてListに頼らなければなりません.△ここは本当に偉大なVisual Studio IDEが私たちにそんなに多くのインタフェースの埋め込みを羅列してくれたことに感謝します.そうしないと、本当に漏れてしまいます.空を埋め終わったら、すべての方法にpublicを加えて、新鮮で熱いICollectionの約束に合った類が出てきました.次のように呼び出します.
     
    static void Main(string[] args)
    {
       Box box = new Box();
       box.Add(new Fruit { Name = "apple", Price = 14 });
       box.Add(new Fruit { Name = "orange", Price = 18 });
       box.Add(new Fruit { Name = "grape", Price = 30 });
       box.Add(new Fruit { Name = "banana", Price = 20});
       foreach (var b in box) Console.WriteLine($"{b.Name} {b.Price }");
    
       Console.WriteLine($"    :{box.Count}");
    
       Fruit fruit = new Fruit { Name="meloon",Price=19};
       box.Add(fruit);
    
       Console.WriteLine(box.Contains(fruit));
       Console.WriteLine($"    :{box.Count}");
       Console.WriteLine(box.Remove(fruit));
       Console.WriteLine($"    :{box.Count}");
       Console.ReadKey();
    }
    
    //    :
    apple 14
    orange 18
    grape 30
    banana 204
    True
        :5
    True
        :4

     
    その参考三いくつかのインタフェースの使い方について詳しく話しているので、しっかり覚えておきましょう.しかし、C#はやはりハイエンドに設計されていると思います.私たち自身が実現したのは、システムが与えたタイプに包まれているような気がしますが、言ってみれば便利で安心しています.後で功力が深くなってからシステムが与えたいくつかのタイプを研究します.
    本文は終わります.現段階で宇宙で最も完璧なC言語のIDE Visual Studioに改めて感謝します.初心者には多くの便利さをもたらします.