25 Ağustos 2015

Interface 3: Virtual/Abstract Olarak Kullanma

using System;

namespace Interface2
{
    class Program
    {


        public interface IUndoable { void Undo();}

        /*
         Uygulanan bir interface'nin elemanları varsayılan olarak sealed(mühürlüdür.) Üzerine yazılabilmesi için(overriden) uygulandığı class içerisinde virtual ya da abstarct
         olarak belirtilmesi gerekir.
         * Örneğin
         */
        public class TextBox : IUndoable
        {
            public virtual void Undo()//Virtual olarak işaretledik.
            {
                Console.WriteLine("TextBox.Undo");
            }
            //void virtual IUndoable.Undo()//Uyarı Interface belirtilerek oluşturulursa virtual ya da abstract metdou kullanamazsınız.Bu durumu diğer notta işleyeceğiz.
            //{
            //    Console.WriteLine("TextBox.Undo");
            //}
        }
        public class RichTextBox : TextBox
        {
            public override void Undo()//Virtual Olduğu için değiştirebildik.
            {
                Console.WriteLine("RichTextBox.Undo");
            }
        }

        static void Main(string[] args)
        {
            RichTextBox r = new RichTextBox();
            r.Undo();//RichTextBox.Undo
            ((IUndoable)r).Undo();//RichTextBox.Undo
            ((TextBox)r).Undo();//RichTextBox.Undo

            Console.ReadKey();
        }
    }
}