25 Ağustos 2015

Interface 1

 using System;

namespace Interface
{
    class Program
    {
        /*
         Interfaces(Arayüz)
         Interface in amacı bir classın nasıl bir arayüze sahip olacağını belirtmesidir. Binevi tanımlayıcısı, rehberidir.

         * Bir interface classa benzer, fakat aşağıdaki bazı özellikleri sağlar. Bir interface aşağıdaki yönlerden dolayı özeldir.
         * Bütün interface üyeleri abstract tır. Aksine class üyeleri hem abstract(soyut) hemde conrete(somut) olabilirler.
         * Bir class(struct) a birden fazla interface uygulanabilir. Aksine bir class a sadece bir class tan miras(inherit) alabilir . struct hiç birine mirasçı(inherit) olamaz.
       
         Interface tanımlarken class gibi tanımlarız. Ama interface de kod kısmı olmaz. Bütün elemanları class ya da struct ta tanımlarız.
         * Bir interface metodlarrı, özellikleri(properties), events(olayları) ve indexer içerebilir.
       
         * Aşağıdaki örneği inceleyelim
         *
         * Burada tüm elemanlar public tir ve başına access modifiers getirlemez.
         */



        public interface IEnumerator//interface oluşturuken başına I harfi koymak bir kültürdür zorunlu değildir.
        {
           // private int Deneme { get; set; }//Hata interface elemanlarındı access modifiers uygulanamaz.
            bool MoveNext();
            object Current { get; }
            void Reset();
        }
        //Şimdi bu interface mizi class içerisine uygulayalım.
        internal class Countdown : IEnumerator
        {
            int count = 11;
            //bool MoveNext() { return count-- > 0; }//Hata tüm IEnumaratorlar public olduğu için class içerisindeki karşılıklarıda public olmalıdır.
            public bool MoveNext() { return count-- > 0; }
            public object Current { get { return count; } }
            public void Reset() { throw new NotSupportedException(); }
        }

        static void Main(string[] args)
        {
            IEnumerator e = new Countdown();//Bir IEnumarator bir classın değerini alabilir.
            while (e.MoveNext())
                Console.WriteLine(e.Current);

            Console.ReadKey();
        }
    }
}


EK