دوره آموزشی #C-قسمت 19 - Inheritance

هنگامی که یک نمونه جدید از یک زیر کلاس ایجاد می کنید، #C ابتدا سازنده کلاس پایه و سپس سازنده کلاس فرعی را فراخوانی می کند.
به عنوان مثال ابتدا یک کلاس Person با سازنده بدون پارامتر تعریف کنید:
class Person{ public Person() { Console.WriteLine(Called the Person's constructor); } }
توجه داشته باشید که parameterless constructor یک کلاس سازنده ای است که هیچ پارامتری ندارد. اگر به صراحت سازنده بدون پارامتر را تعریف نکنید، کامپایلر #C به طور خودکار یک سازنده برای کلاس ایجاد می کند.
دوم، یک کلاس Employee تعریف کنید که از کلاس Person ارث بری می کند:
class Employee : Person { public Employee() { Console.WriteLine(Called the Employee's constructor); } }
سوم، یک نمونه جدید از کلاس Employee ایجاد کنید:
var employee = new Employee();
و در نهایت خروجی :
Called the Person's constructor Called the Employee's constructor
همانطور که در خروجی مشاهده می کنید، #C ابتدا سازنده کلاس Person و سپس سازنده کلاس Employee را اجرا می کند.
در واقع سی شارپ همیشه سازنده بدون پارامتر کلاس والد را فراخوانی می کند. مثال زیر را در نظر بگیرید.
ابتدا یک سازنده با پارامتر name به هر دو کلاس Person و Employee اضافه کنید:
class Person { public Person() { Console.WriteLine(Called the Person's constructor); } public Person(string name) { Console.WriteLine(Called the Person's constructor with a parameter); } } class Employee : Person { public Employee() { Console.WriteLine(Called the Employee's constructor); } public Employee(string name) { Console.WriteLine(Called the Employee's constructor with a parameter); } }
سپس، یک نمونه جدید از کلاس Employee ایجاد کنید:
var employee = new Employee(reza mohamadi);
خروجی :
Called the Person's constructor Called the Employee's constructor with a parameter
در این حالت، سی شارپ ابتدا سازنده بدون پارامتر کلاس Person (کلاس پایه) و سپس سازنده را با پارامتری از کلاس Employee (زیر کلاس) اجرا می کند.
اگر سازنده بدون پارامتر کلاس Person و/یا کلاس Employee را حذف کنید، با خطا مواجه خواهید شد. مثلا:
class Person { public Person(string name) { Console.WriteLine(Called the Person's constructor with a parameter); } } class Employee : Person { public Employee(string name) { Console.WriteLine(Called the Employee's constructor with a parameter); } }
خطا :
There is no argument given that corresponds to the required formal parameter 'name' of 'Person.Person(string)'
در این مثال، کلاس Person سازنده بدون پارامتر ندارد. هنگامی که یک نمونه جدید از کلاس Employee ایجاد می کنید، C# سازنده بدون پارامتر کلاس Person را فراخوانی می کند.
با این حال، نمی تواند سازنده بدون پارامتر را در کلاس Person پیدا کند. بنابراین خطا صادر می کند.
برای رفع این مشکل، به جای اینکه به #C اجازه دهید سازنده بدون پارامتر را فراخوانی کند، میتوانید صریحاً یک سازنده خاص از یک کلاس والد را فراخوانی کنید.
برای انجام این کار، از ()base پس از اعلان سازنده subclass به صورت زیر استفاده می کنید:
class Person { public Person(string name) { Console.WriteLine(Called the Person's constructor with a parameter); } } class Employee : Person { public Employee(string name): base(name) { Console.WriteLine(Called the Employee's constructor with a parameter); } }
حال، اگر یک نمونه جدید از کلاس Employee ایجاد کنید:
var employee = new Employee(reza mohamadi);
خوب C# ابتدا سازنده کلاس Person و سپس سازنده کلاس Employee را فراخوانی می کند:
Called the Person's constructor with a parameter
Called the Employee's constructor with a parameter
بیایید یک مثال دیگر با هم بررسی کنیم :
ابتدا کلاس Person را با سازنده ای که دارای سه پارامتر است تعریف کنید:
class Person { public string FirstName { get; set; } public string LastName { get; set; } public byte Age { get; set; } public string FullName => ${FirstName} {LastName}; public Person(string firstName, string lastName, byte age) { FirstName = firstName; LastName = lastName; Age = age; } public string Introduce() => $Hi, I'm {FullName}.; }
دوم، Employee را با سازنده ای تعریف کنید که دارای پنج پارامتر است:
class Employee : Person { public string JobTitle { get; set; } public decimal Salary { get; set; } public Employee(string firstName, string lastName, byte age, string jobTitle, decimal salary) : base(firstName, lastName, age) { JobTitle = jobTitle; Salary = salary; } }
در این کلاس، سازنده Employee سازنده Person را با استفاده از ()base فراخوانی می کند.
در وراثت، #C همیشه سازنده بدون پارامتر کلاس والد را فراخوانی می کند، مگر اینکه از ()base برای فراخوانی سازنده خاصی از کلاس والد استفاده کنید.
بیشتر بخوانید : دوره آموزشی #C-قسمت 21 - new Modifier
بیشتر بخوانید : نقشه راه توسعه دهندگان Asp.NET Core
https://zarinp.al/farshidazizi
