#c, آموزش قدم به قدم #c, سی شارپ

ارث بری در سی شارپ (Inheritence in Csharp)

ارث بری در سی شارپ

در این جلسه تیم کدگیت را با آموزش ارث بری در سی شارپ همراهی کنید. این آموزش ادامه شی گرایی در سی شارپ است. پیش نیاز این آموزش شامل موارد زیر است:

  1. آشنایی با کلمه کلیدی this
  2. آشنایی با constructor
  3. آشنایی با شی گرایی

پیش نیاز

قبل از توضیح ارث بری در سی شارپ، نیاز است یک سری موارد را توضیح دهیم. ما فرض کرده ایم برای باغ وحش یک کد ساده را میخواهیم بنویسیم. هر باغ وحش حیواناتی در خود دارد. این حیوانات یک سری ویژگی های مشترک و غیر مشترک دارند. کد ما شامل چهار کلاس است:

  1. کلاس Animal
  2. کلاس Bird
  3. کلاس Fish
  4. کلاس Zoo (همان main برنامه)

در زیر کدها به ترتیب آورده شده است:

   public class Bird
    {
        public void fly(){
            Console.WriteLine("flying......");
        }
    }
    public class Fish
    {
        public void swim(){
            Console.WriteLine("swiming......");
        }
    }
    public class Animal
    {
        int Age;
        String Gender;
        int WeightInKg;

        public Animal(int age, String gender, int weightInKg) {
            Age = age;
            Gender = gender;
            WeightInKg = weightInKg;
        }

        public void eat() {
            Console.WriteLine("eating......");
        }

        public void sleep() {
            Console.WriteLine("sleeping......");
        }
    }

    class Zoo
    {
        public static void Main (string[] args)
        {
            Animal animal1 = new Animal(3, "Male", 10);
            animal1.eat();

            Bird bird = new Bird(1, "Male", 1);
            bird.eat();
            bird.fly();

            Console.ReadKey ();
        }
    }

کلاس های Fish و Bird شامل یک متد هستند(یکی swim و دیگری fly). کلاس animal شامل فیلدهای سن و جنسیت و وزن است و یک Constructor هم برای فیلهای آن نوشتیم. دو متد Eat و sleep هم در این کلاس است. در کلاس Zoo از کلاسهای Animal و Bird یک شی ساختیم و متدهای آنها را صدا زدیم.

ارث بری در سی شارپ

در بالا ما سه کلاس Fish و Bird و Animal داریم. در کلاس Animal دو متد خوابیدن (Sleeping) و خوردن(Eating) قرار دادیم. مسئله اینجاست که دقیقا این ویژگیها در کلاس Bird و Fish هم وجود دارد. یک راه این است که تمام متدهای در کلاس Animal را درون این دو کلاس قرار دهیم ولی آیا این راه درست است؟ اگر بخواهیم یک حیوان دیگر بسازیم باز هم باید همین کار ها را بکنیم؟!!!

راه حل استفاده از ارث بری در سی شارپ است. ارث بری در سی شارپ همانطور که از نام آن معلوم است ارث بردن تمام ویژگیهای یک کلاس به کلاس دیگر است.

کلمات کلیدی ارث بری در سی شارپ

در ارث بری با یک سری کلمات جدید آشنا میشویم و به همین دلیل یک قسمت جداگانه برای معرفی این کلمات قرار دادیم. کلمات کلیدی به صورت زیر هستند:

  1. کلاس پدر: اگر کلاس Bird از کلاس Animal ارث بری کند کلاس Animal را کلاس پدر میگوییم.
  2. کلاس فرزند: اگر کلاس Bird از کلاس Animal ارث بری کند کلاس Bird را کلاس فرزند میگوییم.
  3. base: اشاره گر به شی پدر. با base ما به constructor و متدها و فیلدهای پدر دسترسی داریم (البته در صورت private نبودن).

 کد ارث بری در سی شارپ

در بالا گفتیم میخواهیم کدی بزنیم که هم Bird و هم Fish ویژگیهای Animal را داشته باشند. برای این کار ما باید این دو کلاس را ارث بری کنیم به کلاس Animal . کد این دو کلاس به صورت زیر است(به بعد از نام کلاس ‘:’ را اضافه کردیم برای ارث بری):

    public class Bird:Animal
    {
        public Bird(int age, String gender, int weightInKg) :base(age, gender, weightInKg){
            
        }

        public void fly(){
            Console.WriteLine("flying......");
        }
    }
    public class Fish: Animal
    {
        public Fish(int age, String gender, int weightInKg) : base(age, gender, weightInKg){
            
        }

        public void swim(){
            Console.WriteLine("swiming......");
        }
    }

همانطور که میبینید ما این کلاس ها را ارث بری کردیم ولی یک Constructor هم اضافه شد به کد نسبت به قبل. دلیل نوشتن Constructor این است که وقتی ما شی از bird میسازیم به دلیل ارث بری در سی شارپ به طور غیر مستقیم یک شی Animal نیز ساختیم(چرا؟!!). به همین دلیل با کلیدواژه Base میتوانیم Constructor پدر را صدا بزنیم.

تست ارث بری در سی شارپ

برای تست کدهای بالا، کد main زیر را بزنید:

class Zoo
    {
        public static void Main (string[] args)
        {
            Animal animal1 = new Animal(3, "Male", 10);
            animal1.eat();

            Bird bird = new Bird(1, "Male", 1);
            bird.eat();
            bird.fly();

            Console.ReadKey ();
        }
    }

همانطور که میبینید bird متد eat را هم میتواند صدا بزند. توجه داشته باشید که کلاس Animal به متد fly و swim دسترسی ندارد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *