
---

**WEBVTT**

00:00.000 --> 00:03.780
توی این ویدیو می‌خوایم ببینیم ویژگی‌ها یا همون propertyها چطوری به ارث می‌رسن.

00:03.780 --> 00:08.490
و قراره شروع کنیم به بررسی سازنده‌ها یا همون constructorها در ارث‌بری.

00:08.490 --> 00:12.360
ولی توی ویدیوهای بعدی عمیق‌تر وارد جزئیاتش می‌شیم.

00:12.390 --> 00:12.690
خب.

00:12.690 --> 00:16.350
اول از همه یه کلاس عمومی دارم به اسم Person، درسته؟

00:16.350 --> 00:21.060
و یه سازنده دارم که مربوط به کلاس پایه‌ست و فقط مینویسه “Person constructor called”.

00:21.600 --> 00:26.610
بعد یه متد خالی دارم به اسم DisplayPersonInfo.

00:26.640 --> 00:32.910
حالا اطلاعاتی که می‌خوام از شخص ذخیره کنم قراره شامل اسم باشه.

00:32.910 --> 00:40.290
پس یه string name تعریف می‌کنم و setterش رو private می‌ذارم.

00:40.290 --> 00:44.670
و بعد یه property دیگه برای سن تعریف می‌کنم.

00:44.670 --> 00:46.650
و setter اونم private می‌ذارم.

00:46.650 --> 00:52.260
یعنی هیچ‌کس جز خود کلاس Person نمی‌تونه سن رو تنظیم کنه.

00:52.260 --> 00:58.920
حالا می‌بینی سازنده‌ی Person این propertyهای non-nullable رو داره ولی هنوز تنظیمشون نکردیم.

00:58.920 --> 01:00.270
پس بیایم تنظیمشون کنیم.

01:00.270 --> 01:06.180
می‌گیم هر وقت یه Person می‌سازیم باید name و age رو بفرستیم.

01:06.900 --> 01:13.050
و داخل سازنده می‌نویسیم name = name و age = age.

01:13.140 --> 01:13.920
خب.

01:14.040 --> 01:15.570
چیز جدیدی نیست، نه؟

01:15.600 --> 01:21.030
تا حالا بارها دیدیم که سازنده و property تعریف می‌کنیم.

01:21.030 --> 01:23.400
اینجا هم همونه، فقط مقداردهی توی سازنده انجام می‌شه.

01:31.380 --> 01:35.490
حالا سوال اینه: توی کلاس‌های ارث‌بری‌شده چی؟

01:35.490 --> 01:42.600
برای همین یه کلاس جدید درست می‌کنم به اسم Employee.

01:42.900 --> 01:49.230
و این کلاس از Person ارث می‌بره، چون هر کارمند درواقع یه شخص هم هست.

01:49.230 --> 01:55.290
الان یه ارور داریم که می‌گه هیچ آرگومانی برای name و age به سازنده‌ی Person داده نشده.

01:57.420 --> 02:03.900
یعنی باید name و age رو مقدار بدیم.

02:09.510 --> 02:14.070
ولی نکته‌ی جالب اینه که نیازی نیست دوباره propertyها رو توی Employee تعریف کنیم،

02:14.070 --> 02:18.810
چون از کلاس والد به ارث می‌رسن.

02:18.810 --> 02:20.040
فقط باید ازشون استفاده کنیم.

02:21.480 --> 02:26.970
پس یه سازنده برای Employee می‌سازم.

02:29.640 --> 02:35.010
بازم همون ارور میاد: باید name و age پاس بدیم.

02:38.460 --> 02:44.040
حتی وقتی یه Employee می‌سازیم، باید name و age رو وارد کنیم.

02:53.490 --> 02:54.690
ولی اینا باید به base پاس داده بشن.

02:54.690 --> 02:59.340
base یعنی چی؟ یعنی سازنده‌ی کلاس والد.

03:08.400 --> 03:12.390
اینجا base دقیقاً مثل سازنده‌ی Person عمل می‌کنه.

03:18.540 --> 03:26.790
پس name و age که توی سازنده‌ی Employee دریافت می‌کنیم، می‌ره برای سازنده‌ی Person.

03:28.830 --> 03:32.010
حالا نیاز نیست چیز دیگه‌ای اضافه کنیم، بعداً اضافه می‌کنیم.

03:35.640 --> 03:37.980
توی ویدیوی بعدی propertyهای بیشتری برای Employee می‌ذاریم.

03:38.490 --> 03:45.030
فعلاً فقط می‌خوام نشون بدم که چطور base با constructor هم قابل استفاده‌ست.

03:53.580 --> 03:58.140
حالا وقتی یه Employee می‌سازیم، مثلاً یه Joe.

04:10.100 --> 04:13.340
می‌نویسم Joe = new Employee("Joe", 36).

04:21.620 --> 04:26.930
بعد DisplayPersonInfo رو صدا می‌زنیم تا اطلاعات Joe نشون داده بشه.

04:32.750 --> 04:39.620
چون Joe یه Employee هست، اما درعین‌حال یه Person هم هست.

04:46.010 --> 04:50.690
پس همه‌ی قابلیت‌های Person رو داره.

04:50.690 --> 04:57.530
توی سازنده‌ی Employee هم یه Console.WriteLine می‌نویسم: “Employee constructor called (derived class)”.

05:10.630 --> 05:13.150
وقتی اجرا کنیم، اول نوشته میاد: “Person constructor called”.

05:13.150 --> 05:16.780
بعد “Employee constructor called”.

05:16.780 --> 05:19.330
و در آخر “Name: Joe, Age: 36”.

05:26.830 --> 05:32.590
یعنی چی؟ یعنی کلاس Person این دو property رو داره و هر کلاس فرزند هم اونارو داره.

05:32.590 --> 05:39.010
توی سازنده داریم بهشون مقدار می‌دیم و یه پیغام هم چاپ می‌کنیم.

05:43.000 --> 05:51.100
جالبه بدونی، وقتی یه Employee ساخته می‌شه، اول سازنده‌ی Person اجرا می‌شه، بعد سازنده‌ی Employee.

05:51.100 --> 05:56.320
چون اول باید ویژگی‌های پایه تنظیم بشن، بعد بریم سراغ ویژگی‌های خاص Employee.

06:08.170 --> 06:17.620
و در نهایت متد DisplayPersonInfo رو روی Joe صدا می‌زنیم چون اونم یه Personه.

06:21.610 --> 06:25.720
چون متد public هست، همه‌ی Employeeها می‌تونن ازش استفاده کنن.

06:30.700 --> 06:36.550
پس با اینکه فعلاً Employee خاصیتی نداره، ولی از Person همه‌چی رو به ارث برده.

06:36.550 --> 06:43.870
بعداً می‌تونیم چیزایی مثل employee ID، حقوق، سمت و... رو اضافه کنیم.

06:55.810 --> 06:56.620
خب.

07:03.850 --> 07:10.120
این ویدیو درواقع مقدمه‌ای بود برای ویدیوی بعدی که یه قدم جلوتر می‌ریم.

07:10.120 --> 07:19.300
نکته‌ی اصلی اینه که propertyها به کلاس فرزند منتقل می‌شن،

07:19.300 --> 07:23.920
و موقع استفاده از constructor باید پارامترها رو با کلمه‌ی base پاس بدیم.

07:26.020 --> 07:29.230
توی ویدیوی بعدی اینو بیشتر گسترش می‌دیم.

07:36.340 --> 07:38.200
name و age هر دو به base پاس داده می‌شن.

07:43.480 --> 07:49.900
می‌تونیم حتی اینجا هم تغییرشون بدیم، مثلاً name = "Frank".

07:54.670 --> 07:57.880
ولی خب اون‌وقت همه‌ی افراد می‌شن Frank، پس حذفش می‌کنم 😄

08:01.930 --> 08:03.850
بریم سراغ ویدیوی بعدی.

---
