توی این ویدیو می‌خوایم ببینیم ویژگی‌ها یا همون propertyها چطوری به ارث می‌رسن.
و قراره شروع کنیم به بررسی سازنده‌ها یا همون constructorها در ارث‌بری.
ولی توی ویدیوهای بعدی عمیق‌تر وارد جزئیاتش می‌شیم.
خب.
اول از همه یه کلاس عمومی دارم به اسم Person، درسته؟
و یه سازنده دارم که مربوط به کلاس پایه‌ست و فقط مینویسه “Person constructor called”.
بعد یه متد خالی دارم به اسم DisplayPersonInfo.
حالا اطلاعاتی که می‌خوام از شخص ذخیره کنم قراره شامل اسم باشه.
پس یه string name تعریف می‌کنم و setterش رو private می‌ذارم.
و بعد یه property دیگه برای سن تعریف می‌کنم.
و setter اونم private می‌ذارم.
یعنی هیچ‌کس جز خود کلاس Person نمی‌تونه سن رو تنظیم کنه.
حالا می‌بینی سازنده‌ی Person این propertyهای non-nullable رو داره ولی هنوز تنظیمشون نکردیم.
پس بیایم تنظیمشون کنیم.
می‌گیم هر وقت یه Person می‌سازیم باید name و age رو بفرستیم.
و داخل سازنده می‌نویسیم name = name و age = age.
خب.
چیز جدیدی نیست، نه؟
تا حالا بارها دیدیم که سازنده و property تعریف می‌کنیم.
اینجا هم همونه، فقط مقداردهی توی سازنده انجام می‌شه.
حالا سوال اینه: توی کلاس‌های ارث‌بری‌شده چی؟
برای همین یه کلاس جدید درست می‌کنم به اسم Employee.
و این کلاس از Person ارث می‌بره، چون هر کارمند درواقع یه شخص هم هست.
الان یه ارور داریم که می‌گه هیچ آرگومانی برای name و age به سازنده‌ی Person داده نشده.
یعنی باید name و age رو مقدار بدیم.
ولی نکته‌ی جالب اینه که نیازی نیست دوباره propertyها رو توی Employee تعریف کنیم،
چون از کلاس والد به ارث می‌رسن.
فقط باید ازشون استفاده کنیم.
پس یه سازنده برای Employee می‌سازم.
بازم همون ارور میاد: باید name و age پاس بدیم.
حتی وقتی یه Employee می‌سازیم، باید name و age رو وارد کنیم.
ولی اینا باید به base پاس داده بشن.
base یعنی چی؟ یعنی سازنده‌ی کلاس والد.
اینجا base دقیقاً مثل سازنده‌ی Person عمل می‌کنه.
پس name و age که توی سازنده‌ی Employee دریافت می‌کنیم، می‌ره برای سازنده‌ی Person.
حالا نیاز نیست چیز دیگه‌ای اضافه کنیم، بعداً اضافه می‌کنیم.
توی ویدیوی بعدی propertyهای بیشتری برای Employee می‌ذاریم.
فعلاً فقط می‌خوام نشون بدم که چطور base با constructor هم قابل استفاده‌ست.
حالا وقتی یه Employee می‌سازیم، مثلاً یه Joe.
می‌نویسم Joe = new Employee("Joe", 36).
بعد DisplayPersonInfo رو صدا می‌زنیم تا اطلاعات Joe نشون داده بشه.
چون Joe یه Employee هست، اما درعین‌حال یه Person هم هست.
پس همه‌ی قابلیت‌های Person رو داره.
توی سازنده‌ی Employee هم یه Console.WriteLine می‌نویسم: “Employee constructor called (derived class)”.
وقتی اجرا کنیم، اول نوشته میاد: “Person constructor called”.
بعد “Employee constructor called”.
و در آخر “Name: Joe, Age: 36”.
یعنی چی؟ یعنی کلاس Person این دو property رو داره و هر کلاس فرزند هم اونارو داره.
توی سازنده داریم بهشون مقدار می‌دیم و یه پیغام هم چاپ می‌کنیم.
جالبه بدونی، وقتی یه Employee ساخته می‌شه، اول سازنده‌ی Person اجرا می‌شه، بعد سازنده‌ی Employee.
چون اول باید ویژگی‌های پایه تنظیم بشن، بعد بریم سراغ ویژگی‌های خاص Employee.
و در نهایت متد DisplayPersonInfo رو روی Joe صدا می‌زنیم چون اونم یه Personه.
چون متد public هست، همه‌ی Employeeها می‌تونن ازش استفاده کنن.
پس با اینکه فعلاً Employee خاصیتی نداره، ولی از Person همه‌چی رو به ارث برده.
بعداً می‌تونیم چیزایی مثل employee ID، حقوق، سمت و... رو اضافه کنیم.
خب.
این ویدیو درواقع مقدمه‌ای بود برای ویدیوی بعدی که یه قدم جلوتر می‌ریم.
نکته‌ی اصلی اینه که propertyها به کلاس فرزند منتقل می‌شن،
و موقع استفاده از constructor باید پارامترها رو با کلمه‌ی base پاس بدیم.
توی ویدیوی بعدی اینو بیشتر گسترش می‌دیم.
name و age هر دو به base پاس داده می‌شن.
می‌تونیم حتی اینجا هم تغییرشون بدیم، مثلاً name = "Frank".
ولی خب اون‌وقت همه‌ی افراد می‌شن Frank، پس حذفش می‌کنم 😄
بریم سراغ ویدیوی بعدی. ---