Aybars Arslan

Console.WriteLine("Hello World");

Inheritance – Kalıtım

Bu yazıda bir diğer OOP prensibi olan inheritance (kalıtım) konusuna değineceğim.

Nesne yönelimli programlamnın en temel ve önemli konularından birisidir. Inheritance(Kalıtım veya miras alma) bize bir sınıftan üretilen nesnelerin özelliklerinin bu sınıfı miras alan sınıflardan üretilen nesneler tarafından kullanılması imkanını sağlar. Temel alınan class tüm özelliklerini yeni classa aktarabilir.

    // Ana Class
    class Sekil
    {
        public void setGenislik(int g)
        {
            genislik = g;
        }

        public void setUzunluk(int u)
        {
            uzunluk = u;
        }

        protected int genislik;
        protected int uzunluk;
    }

    // Turetilen sınıf
    class Diktorgen : Sekil
    {
        public int getAlan()
        {
            // genislik ve uzunluk propertyleri
            // protected tanımlandığı için
            // diktortgen classında kullanabiliyoruz
            // Diktortgen classı, Sekil classından türetilmiş
            return genislik * uzunluk;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Diktorgen d = new Diktorgen();
            d.setGenislik(4);
            d.setUzunluk(2);

            Console.WriteLine("Alan : {0}", Convert.ToInt32(d.getAlan()));
            Console.ReadKey();
        }
    }

Microsoft virtual academy’de inheritance hakkında araştırma yaparken şu örneği inceleme fırsatı bulmuştum onuda aşağıda paylaşıyorum.

    public class Trainer
    {
        void Operate()
        {
            var dog = new Poodle();
            dog.HasSpoken += dog_HasSpoken; 
        }

        private void dog_HasSpoken(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
    }

    public partial class Dog
    {
        // properties hold values
        //public string Name { get; set; }

        //
        private string _name;

        public string Name
        {
            get { return _name; }
            private set
            {
                //look at value
                _name = value;
            }
        }

        public event EventHandler HasSpoken;

        // method signatures are different
        public void Speak(string what = "hav")
        {
            // TODO
            if (HasSpoken != null)
                HasSpoken(this, EventArgs.Empty);
        }

        public void Speak(int times, bool sit = true, string what = "hav")
        {
            // TODO
            Console.WriteLine(what);
        }
        // private only use this class
        private void Foo()
        {

        }

        // protected only this and derived class can use
        protected void Bar()
        {

        }

        // internal only use this assembly
        internal void Daw()
        {

        }
    }

    class Poodle : Dog
    {
        void x()
        {
            this.Speak(2);
            //this.Speak(3, sit:true) -> bypass
            //this.Foo(); -> bııızt -> only in dog class
        }
    }
Paylaş !

, , ,

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir