
---

**WEBVTT**

00:00.140 --> 00:00.560
باشه.

00:00.560 --> 00:03.080
تو این ویدیو قراره کلمه‌ی کلیدی **base** رو بررسی کنیم.

00:03.080 --> 00:08.930
این در واقع یه راه‌حل برای یه مشکله. پس بیایید اول خود مشکل رو ببینیم.

00:08.930 --> 00:18.230
فرض کن دارم یه شیء از کلاس **Dog** می‌سازم و می‌خوام به متد **MakeSound** از کلاس پایه یعنی **Animal** دسترسی پیدا کنم.

00:18.230 --> 00:21.860
اون متدی که صدای عمومی حیوان رو تولید می‌کنه.

00:21.860 --> 00:24.620
اما خب این خیلی کلیه، درسته؟

00:24.620 --> 00:25.280
خیلی ساده‌ست.

00:25.280 --> 00:27.320
فقط یه دستور `Console.WriteLine` داره.

00:27.320 --> 00:34.220
ولی معمولاً تو واقعیت این متدها اینقدر ساده و بی‌خاصیت نیستن.

00:34.220 --> 00:34.910
مثلاً...

00:34.910 --> 00:36.530
ممکنه کلی مقداردهی اولیه انجام بدن،

00:36.530 --> 00:40.910
یه سری ویژگی‌ها (properties) رو تنظیم کنن، مقدارها رو ست کنن و آماده‌سازی انجام بدن.

00:40.910 --> 00:46.970
و ما باید مطمئن بشیم که هر کلاس مشتق‌شده‌ای که داریم، وقتی اون متد رو صدا می‌زنه، باعث اختلال نشه.

00:46.970 --> 00:55.280
چون ممکنه بعضی ویژگی‌ها هنوز مقدار نگرفته باشن یا یه چیزی جا مونده باشه.

00:55.280 --> 01:01.940
اینجاست که می‌تونیم از کلمه‌ی کلیدی **base** داخل کلاس **Dog** استفاده کنیم.

01:01.940 --> 01:09.080
یعنی داخل متد **MakeSound** می‌نویسیم: `base.MakeSound();`

01:09.080 --> 01:16.340
این باعث می‌شه وقتی متد **MakeSound** سگ صدا زده می‌شه،

01:16.340 --> 01:23.780
اول متد **MakeSound** کلاس پایه (Animal) هم اجرا بشه.

01:23.780 --> 01:27.290
در واقع هم متد پایه رو اجرا می‌کنیم، هم کد خودمون رو.

01:27.290 --> 01:35.600
یعنی فقط بازنویسیش نمی‌کنیم، بلکه اجرای اون متد اصلی رو هم صدا می‌زنیم.

01:35.600 --> 01:42.470
به عبارتی هم رفتار پایه رو داریم، هم چیزای جدید خودمون رو بهش اضافه می‌کنیم.

01:42.470 --> 01:45.200
قبلاً فقط رفتار خودمون رو اجرا می‌کردیم،

01:45.200 --> 01:51.650
ولی الان می‌گیم: اول رفتار کلاس پایه اجرا بشه، بعد رفتار مخصوص سگ.

01:51.650 --> 01:58.730
اگه الان برنامه رو اجرا کنیم، اول چاپ می‌شه:
"Animal makes a generic sound"

01:58.730 --> 02:06.650
و بعد:
"Dog makes a barking sound"

02:06.650 --> 02:09.740
یعنی دقیقاً دوتا خروجی پشت سر هم داریم.

02:09.740 --> 02:19.250
البته این یه مثال خیلی ساده‌ست، ولی فرض کن بعضی وقت‌ها اصلاً دسترسی به کلاس پایه نداری.

02:19.250 --> 02:23.270
نمی‌تونی کلاس پایه رو تغییر بدی.

02:23.270 --> 02:26.120
درسته؟

02:26.120 --> 02:26.810
خب.

02:26.810 --> 02:33.380
مثلاً یکی از هم‌تیمی‌هات مسئول اون کلاسه و فقط اون می‌تونه تغییرش بده،

02:33.380 --> 02:35.900
اما تو کدش رو نمی‌تونی ادیت کنی.

02:35.900 --> 02:36.830
فقط می‌تونی ازش استفاده کنی.

02:36.830 --> 02:40.220
می‌تونی متدهاش رو override کنی،

02:40.220 --> 02:47.960
ولی خود کلاس پایه رو نمی‌تونی تغییر بدی.

02:47.960 --> 02:54.350
یا فرض کن داری با یه framework یا کد شخص ثالث کار می‌کنی که خودت ننوشتی.

02:54.350 --> 02:57.560
کدی که اونجوری که هست، باید ازش استفاده کنی.

02:57.560 --> 03:05.270
و تو نمی‌تونی اون کد پایه رو دستکاری کنی، فقط باید باهاش کنار بیای.

03:05.270 --> 03:06.500
خب حالا در این وضعیت،

03:06.500 --> 03:12.410
می‌خوای از رفتار پایه‌ی اون کلاس استفاده کنی،

03:12.410 --> 03:20.390
ولی یه چیزای مخصوص خودت هم بهش اضافه کنی.

03:20.390 --> 03:21.620
درسته؟

03:21.620 --> 03:28.880
اینجا باید مطمئن بشی که اجرای متد اصلی (متد کلاس پایه) همچنان انجام می‌شه،

03:28.880 --> 03:31.970
بعدش کد خودت روش اجرا می‌شه.

03:31.970 --> 03:41.330
یعنی اول `base.MakeSound()`، بعد قسمت مخصوص خودت.

03:41.330 --> 03:42.230
همین.

03:42.230 --> 03:47.060
ما تو این مثال مثل یه کاربر کامل یا توسعه‌دهنده‌ی "خدای‌گونه" هستیم که به همه‌چی دسترسی داره 😄

03:47.060 --> 03:56.300
ولی تو دنیای واقعی این‌طوری نیست — تو همیشه به همه‌ی کدها دسترسی نداری.

03:56.300 --> 04:04.640
و اگه بخوای کلاس پایه رو عوض کنی، ممکنه بقیه‌ی برنامه‌نویس‌ها که دارن از اون استفاده می‌کنن، متوجه نشن.

04:04.640 --> 04:05.930
و یهو کل سیستم بهم بریزه 😅

04:05.930 --> 04:09.890
فقط چون گفتی «می‌خوام کد پایه رو عوض کنم».

04:09.890 --> 04:14.120
در حالی که باید فقط متد یا ویژگی مخصوص خودت رو تغییر می‌دادی.

04:14.120 --> 04:26.780
اون بخش‌هایی که لازم داری متفاوت باشن، نه کد اصلی.

04:26.780 --> 04:35.180
این یه نکته‌ی جانبی ولی خیلی مهمه توی طراحی شی‌ءگرا.

04:35.180 --> 04:45.740
خب، تا اینجا همین.

04:45.740 --> 04:49.790
تو ویدیو بعدی ادامه می‌دیم 😊

---

