using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Inheritance
{
    class Examples9_14
    {
        // Listing 6-9
        public static void UseBase(Base b)
        {
        }

        // Listing 6-10
        public static void AllYourBase(IEnumerable<Base> bases)
        {
        }

        public static void PassDerivedItemsAsEnumerable()
        {
            // Listing 6-11
            IEnumerable<Derived> derivedBases =
                new Derived[] { new Derived(), new Derived() };
            AllYourBase(derivedBases);
        }

        // Listing 6-12
        public static void AddBase(ICollection<Base> bases)
        {
            bases.Add(new Base());
        }

        //// Kod umieszczony w komentarzu gdyż ilustruje błąd.
        //public static void BadAttemptToPassDerivedItemsAsCollection()
        //{
        //    // Listing 6-13
        //    ICollection<Derived> derivedList = new List<Derived>();
        //    AddBase(derivedList);  // tego nie uda się skompilować!
        //}
    }

    // To fragment definicji typu z biblioteki klas .NET Framework,
    // dlatego został umieszczony w komentarzu - nie należy go umieszczać 
    // w rzeczywistym kodzie.
    // Listing 6-14
    // public interface IEnumerable<out T> : IEnumerable
}
