

WEBVTT

00:00.140 --> 00:01.040
خوش برگشتین.

00:01.040 --> 00:08.120
خب حالا در این مرحله بالاخره آماده‌ایم که بریم سراغ بحث عمیق‌تر درباره‌ی Access Modifierها، چون تا حالا اون‌قدری که باید واردش نشده بودیم.

00:08.120 --> 00:14.360
دلیلش هم این بود که یکی از اون‌ها هنوز موقعیت درستی برای توضیحش نداشت.

00:14.360 --> 00:14.690
خب.

00:14.690 --> 00:18.290
تا الان Public و Private رو دیدیم و فهمیدیم چطوری کار می‌کنن.

00:18.290 --> 00:23.750
حالا بیایم ببینیم وقتی کلاس‌ها از هم ارث‌بری می‌کنن یا در حالت Inheritance چه رفتاری دارن.

00:23.750 --> 00:28.280
اینجا یه Base Class داریم که سه تا Field داره، درسته؟

00:28.280 --> 00:32.750
یکی Public هست، یکی Protected و یکی هم Private.

00:32.750 --> 00:35.360
پس Public، Protected و Private داریم.

00:35.360 --> 00:38.780
این‌ها همون Access Modifierها هستن.

00:38.780 --> 00:41.330
Access Modifierها.

00:41.480 --> 00:42.050
خب.

00:42.050 --> 00:44.930
و این‌ها سه نوع متفاوت Access Modifier هستن.

00:44.930 --> 00:47.000
یه نوع چهارم هم داریم به اسم Internal.

00:47.000 --> 00:51.260
ولی وقتی صحبت از ارث‌بری میشه، همین سه‌تا مهم‌ترن.

00:51.260 --> 00:53.240
یعنی Public، Protected و Private.

00:53.240 --> 01:01.160
حالا داخل متد Public به اسم void showFields، متغیرهای مختلف رو داریم که دارم با Console نمایش‌شون می‌دم.

01:01.160 --> 01:06.560
و حالا می‌ریم سراغ Derived Class من.

01:06.560 --> 01:09.890
اینجا کلاس فرزند منه و اون بالا کلاس پدر یا Base Class.

01:09.890 --> 01:11.270
یعنی Parent Class.

01:11.270 --> 01:12.860
یا همون Base Class.

01:12.860 --> 01:15.380
خب همون‌طور که احتمالاً حدس زدین.

01:15.380 --> 01:21.440
حالا بیایم امتحان کنیم ببینیم می‌تونیم Fieldهای کلاس پدر رو دسترسی پیدا کنیم یا نه.

01:21.440 --> 01:27.170
یعنی Public Field، Protected Field و Private Field رو ببینیم چطوری رفتار می‌کنن.

01:27.170 --> 01:27.860
خب.

01:27.860 --> 01:33.200
اول از همه می‌خوام مقدار Public Field رو تغییر بدم.

01:33.200 --> 01:35.180
فرض کن عدد ۱ رو بهش می‌دم.

01:35.210 --> 01:38.420
هیچ مشکلی نداره، Protected Field رو هم تغییر می‌دم.

01:38.420 --> 01:39.890
می‌بینی؟ اونم جواب می‌ده.

01:39.890 --> 01:44.690
اما حالا می‌خوام Private Field رو تغییر بدم.

01:44.690 --> 01:47.900
و می‌بینی که اینجا ارور می‌گیرم.

01:47.900 --> 01:50.030
می‌گه Field مربوط به Base Class.

01:50.030 --> 01:53.930
Private Field به خاطر سطح دسترسیش قابل دسترسی نیست.

01:53.930 --> 01:56.660
و این دقیقاً کاربرد Private رو نشون می‌ده.

01:56.660 --> 02:04.010
Private یعنی فقط داخل همون کلاس قابل دسترسیه.

02:04.010 --> 02:11.990
یعنی هر عضوی که Private باشه، فقط داخل همون کلاس در دسترسه، چه Field باشه، چه Property، چه Method.

02:11.990 --> 02:18.740
هرچی جلوی اسمش Private باشه، از بیرون اون کلاس قابل دسترسی نیست.

02:18.740 --> 02:21.620
خب.

02:21.620 --> 02:30.650
اینجا می‌بینی که نمی‌تونیم Private Field رو از کلاس فرزند دسترسی پیدا کنیم.

02:30.650 --> 02:32.720
چون Derived Class نمی‌تونه به Fieldهای Private دسترسی داشته باشه.

02:32.720 --> 02:38.780
حالا، اگه بخوای یه Field قابل دسترسی باشه، باید مطمئن شی که Private نیست.

02:38.780 --> 02:46.730
ولی اگه نخوای اون Field برای همه‌ی کلاس‌ها قابل دسترسی باشه، فقط برای کلاس‌های فرزند، اون موقع از Protected استفاده کن.

02:46.730 --> 02:50.270
اینجاست که Protected به درد می‌خوره.

02:50.270 --> 02:54.350
Protected در واقع نقطه‌ی تفاوت بین دو تای دیگه‌ست.

02:54.350 --> 03:00.080
یه چیزی بین Public و Private محسوب می‌شه.

03:00.110 --> 03:04.940
Public برای همه در دسترسه.

03:04.940 --> 03:07.280
Private فقط برای همون کلاس.

03:07.280 --> 03:10.280
Protected برای هر کلاس فرزند در دسترسه.

03:10.280 --> 03:15.320
یعنی هر Derived Class.

03:15.320 --> 03:18.860
و این برای همه‌ی اعضا صدق می‌کنه، نه فقط Fieldها.

03:18.860 --> 03:22.010
برای Propertyها و Methodها هم همین‌طوره.

03:22.040 --> 03:26.420
خب.

03:26.420 --> 03:27.110
فقط می‌خواستم این بخش رو باهات تموم کنم و روشن‌ترش کنیم.

03:27.110 --> 03:32.090
الان دیدی که چطور باید ازش استفاده کرد و کِی میشه و کِی نه.

03:32.090 --> 03:36.350
خب.

03:36.350 --> 03:42.650
حالا بریم یه Object از Base Class بسازیم.

03:42.650 --> 03:48.260
مثلاً بنویسیم BaseClass myBaseClass یا همون BaseClass new BaseClass.

03:48.260 --> 03:50.540
و حالا متد showFields رو صدا بزنیم.

03:50.540 --> 03:55.550
و ببینیم چی میشه.

03:55.550 --> 03:56.660
خب بریم اجراش کنیم.

03:56.660 --> 04:00.170
و بعد یه Object از Derived Class هم بسازیم.

04:00.170 --> 04:02.300
یعنی DerivedClass.

04:02.300 --> 04:06.290
و showFields اون رو هم صدا بزنیم.

04:06.290 --> 04:07.760
ببینیم نتیجه چیه.

04:07.760 --> 04:10.520
می‌بینی؟ public صفر، protected صفر، همه‌شون صفرن.

04:10.520 --> 04:12.110
دلیلش اینه که هنوز متدی که مقدار میده رو صدا نزدیم.

04:12.110 --> 04:17.390
پس بیایم اون متد رو هم صدا بزنیم تا مقدارها تنظیم شن.

04:17.390 --> 04:22.250
اینجا derivedClass.dot

04:22.250 --> 04:26.120
و متدی که نوشتیم accessFields بود، درسته؟

04:26.120 --> 04:29.120
خب همونه.

04:29.120 --> 04:29.690
باشه.

04:29.690 --> 04:31.250
حالا اجرا کنیم و ببینیم.

04:31.280 --> 04:33.950
می‌گه public صفر، protected صفر، private صفر، و بعد public یک، protected دو و private صفر.

04:33.950 --> 04:40.010
یعنی نتونستیم مقدار Private رو تغییر بدیم.

04:40.010 --> 04:44.540
ولی هنوز می‌تونیم مقدارش رو ببینیم.

04:44.540 --> 04:54.950
چون مستقیماً بهش دسترسی نداریم، اما داریم از طریق متد showFields اون رو می‌بینیم.

04:54.950 --> 04:57.830
یعنی متد showFields داره مقدار اون متغیر Private رو نشون می‌ده.

04:57.830 --> 04:59.660
فقط مقدارش رو، نه خود متغیر رو.

04:59.850 --> 05:04.020
برای همینه که می‌تونیم مقدار Private Field رو ببینیم، ولی خود Field نه.

05:04.020 --> 05:10.260
چون این نمایش از طریق متد پدر اتفاق می‌افته، نه مستقیماً.

05:10.260 --> 05:19.890
پس به خود متغیر Private دسترسی نداریم، فقط به مقداری که اون متد نشون می‌ده.

05:19.890 --> 05:27.450
نمی‌تونیم مقدارش رو تغییر بدیم یا مستقیم نمایش بدیم.

05:27.450 --> 05:31.380
مثلاً نمی‌تونیم بنویسیم Console.WriteLine و مقدار Private Field رو چاپ کنیم.

05:31.380 --> 05:32.280
چون Private هست.

05:32.280 --> 05:37.320
خب، این شاید یه کم غیرمنتظره بوده باشه.

05:37.320 --> 05:39.870
شاید هم نه، ولی خواستم این بخش رو روشن کنم.

05:39.870 --> 05:43.200
که بدونی اینم بخشی از ماجراست.

05:43.200 --> 05:47.280
خب.

05:47.280 --> 05:50.910
پس اینم از این ویدیو.

05:50.910 --> 05:54.900
تو ویدیوی بعدی می‌بینمت.

05:54.900 --> 06:00.300
خدافظ.

06:00.300 --> 06:00.810
خب.

06:00.810 --> 06:02.310
همین بود.

06:02.310 --> 06:03.240
تا بعد!

---

