25 Ağustos 2015

Interface 2 : Genişletme

using System;

namespace Interface1
{
    class Program
    {
        /*
         Bir Interface'ı Genişletmek
         *
         * Bir interface genişletmek class mantığı ile aynıdır.
         */
        public interface IUndoable
        {
            void Undo();
        }
        public interface IRedoable : IUndoable
        {
            void Redo();
        }

        /*Belirtilmiş Interface Uygulaması
         İki interfaceimiz aynı metodu içeriyiorsa bunları belirtmemiz gerekiyor.
         Örnek verelim
         */

        interface I1 { void Foo();}
        interface I2 { int Foo();}

        public class Widget : I1, I2//Bir classa birden fazla interface uygulamak için arasına virgül koymamız yeterlidir.
        {
            //public void I1.Foo()//Başına public koyarak I1. Foo yazarsak hata alırız.
            public void Foo()//Public void şeklinde yazarsak kendisi otomatik olarak I1 alacaktır.
            {
                Console.WriteLine("Widget a uygulanan I1.Fonksiyonu");
            }
            int I2.Foo()//I1.Foo şeklinde yazdığımız zaman public yazmamıza gerek yoktur. İki Interface arasındaki farkı bu şekilde tanımlamalıyız.
            {
                Console.WriteLine("Widget a uygulanan I2.Fonksiyonu");
                return 1;
            }
        }

        static void Main(string[] args)
        {
            Widget w = new Widget();
            w.Foo();//Widget a uygulanan I1.Fonksiyonu
            ((I1)w).Foo();//Widget a uygulanan I1.Fonksiyonu
            ((I2)w).Foo();//Widget a uygulanan I2.Fonksiyonu

            Console.ReadKey();

        }
    }
}


Ek