WEBVTT

00:00.140 --> 00:02.030
propertyدر این ویدیو می‌خواهیم به 
 ها نگاه کنیم.

00:02.030 --> 00:08.570
property ها بخش مهمی از کپسوله‌سازی هستند که خود بخش مهمی از برنامه‌نویسی شیءگرا است.

00:08.570 --> 00:09.530
برنامه‌نویسی.

00:09.530 --> 00:16.160
و کاری که می‌کند این است که متغیرها را از دسترسی بیرونی محافظت می‌کند.

00:16.160 --> 00:20.330
ما قبلاً متغیرها را از دسترسی بیرونی محافظت کرده‌ایم.

00:20.330 --> 00:22.250
ولی این کافی نیست.

00:22.250 --> 00:29.270
ما می‌خواهیم کنترل داشته باشیم که این متغیر، مثلاً model، چطور از بیرون دسترسی پیدا کند

00:29.270 --> 00:32.480
و چطور تغییر کند.

00:32.480 --> 00:36.530
چون الان نه می‌توانیم از بیرون به آن دسترسی بگیریم و نه تغییرش دهیم.

00:36.530 --> 00:37.460
می‌توانیم امتحان کنیم.

00:37.460 --> 00:47.060
مثلاً بگوییم Audi نقطه آندرلاین model و چیزی به آن اختصاص دهیم.

00:48.320 --> 00:51.440
ولی این خطا می‌دهد. اگر بروی روی آن، می‌گوید:

00:51.470 --> 00:56.330
car.model به خاطر سطح حفاظت غیرقابل دسترسی است.

00:56.330 --> 00:57.980
خب سطح حفاظت چیست؟

00:57.980 --> 01:00.320
است.privateالان سطح حفاظت 
 
01:00.320 --> 01:03.800
این کلیدواژه سطح حفاظت را مشخص می‌کند.

01:03.800 --> 01:10.850
 یعنی این متغیر فقط داخل همان کلاس تغییر کندprivate.

01:10.850 --> 01:19.190
publicاگر آن را 
 کنم، خطا ناپدید می‌شود چون الان می‌توانم تغییرش دهم.

01:19.190 --> 01:23.300
نیست.privateچون دیگر 

01:23.300 --> 01:24.560
است.publicحالا 

01:24.560 --> 01:30.500
Program.csپس حالا کلاس‌های بیرونی مثل 
 به آن دسترسی دارند.

01:30.500 --> 01:32.780
اما مشکل کجاست؟

01:32.780 --> 01:35.300
این یک روش برنامه‌نویسی بد است.

01:35.300 --> 01:37.280
این کاری نیست که باید بکنیم.

01:37.280 --> 01:45.470
ایده کپسوله‌سازی و به طور کلی شیءگرایی این است که راه‌های تمیزتری برای تغییر داشته باشیم.

01:46.760 --> 01:47.630
چرا؟

01:47.630 --> 01:53.690
modelچون باید بتوانیم مشخص کنیم متغیر 
 چه زمانی و چطور دسترسی داشته باشد.

01:53.690 --> 01:59.690
propertyاینجا می‌توانیم یک 
 اطرافش بسازیم.

01:59.690 --> 02:01.430
خب چطور انجامش دهیم؟

02:01.430 --> 02:05.090
استفاده کنیم.propertyمی‌توانیم از چیزی به نام 

02:05.090 --> 02:08.570
خودمان را اینطور بسازیم.propertyمی‌توانیم 
 
02:08.570 --> 02:11.210
استفاده کنیم و تب بزنیم.propاز کلید 
 
02:11.210 --> 02:14.060
بعد نوع داده را مشخص کنیم.

02:14.060 --> 02:15.500
استفاده می‌کنم.stringمن 

02:15.500 --> 02:17.360
دوباره تب می‌زنیم.

02:17.360 --> 02:18.950
بعد اسم می‌دهیم.

02:18.950 --> 02:23.450
propertyمی‌بینید 
 با حرف بزرگ شروع می‌شود.

02:23.450 --> 02:25.400
می‌گذارم.Modelمن اینجا 

02:25.400 --> 02:30.560
است.propertyپس این یک  

02:30.560 --> 02:37.970
اینجا get و set داریم یعنی می‌توانیم مشخص کنیم property چطور گرفته یا تنظیم شود.

02:40.520 --> 02:42.200
چطور بازنویسی شود.

02:42.200 --> 02:48.620
propertyراه‌های مختلفی هست که فیلد توسط 
 محافظت شود.

02:48.620 --> 02:52.670
Quick Actionsمی‌توانید راست کلیک کنید و 
 را بزنید.

02:52.670 --> 02:58.520
روی encapsulate بروید و use property را انتخاب کنید.

02:58.520 --> 03:01.220
دیدید چه کرد؟

03:01.220 --> 03:02.270
شاید ندیدید.

03:02.270 --> 03:03.560
دیدنش سخت است.

03:03.560 --> 03:09.860
encapsulate field و use propertyولی اگر روی آن بروید و 
 را بزنید،

03:09.860 --> 03:12.500
این کد ساخته می‌شود.

03:12.500 --> 03:16.910
lambda expressionاین کد از 
 استفاده می‌کند.

03:16.910 --> 03:21.500
است.lambda expressionاین یک 
 
03:21.500 --> 03:23.660
modelولی در اصل می‌گوید هر وقت 
 را خواستید،

03:23.660 --> 03:29.960
به شما model می‌دهم. هر وقت model را تنظیم کنید،

03:29.960 --> 03:36.530
هر مقداری بدهید، آن را به عنوان model می‌گذارم.

03:36.530 --> 03:42.110
این قبلی را پاک کنم، اینطور می‌شود.

03:42.110 --> 03:44.390
خب.

03:44.390 --> 03:50.150
modelو می‌بینید کدم خودکار 
 من را محافظت کرد.

03:50.150 --> 03:54.980
را. modelمتغیر عضو خصوصی
 
03:54.980 --> 03:57.380
اینجا هم آن را پوشاند.

03:57.380 --> 04:00.740
من را بازنویسی کرد._modelپس 

04:00.740 --> 04:07.250
این بخشی از کپسوله‌سازی است که مطمئن شویم متغیر محافظت شده

04:07.250 --> 04:11.240
داریم.get و setو کنترل کامل روی 

04:11.240 --> 04:14.630
پس اینجا می‌توانیم مشخص کنیم.

04:14.630 --> 04:17.360
گام به گام به آن می‌رسیم.

04:17.360 --> 04:22.970
refactoringولی فقط خواستم نشان دهم سریع می‌شود با 
 این کار را کرد.

04:22.970 --> 04:25.550
brandهمین کار را با 
 هم می‌کنیم.

04:25.550 --> 04:27.410
اینجا راست کلیک کنید.

04:27.440 --> 04:33.560
Quick Actions را بزنید و بگویید encapsulate field brand و use property.

04:33.560 --> 04:39.890
حالا این کد ساخته شد. مثل model است.

04:39.890 --> 04:43.040
فقط الان یک property به نام brand داریم.

04:43.040 --> 04:43.850
public است.

04:43.850 --> 04:44.930
string است.

04:44.930 --> 04:51.230
_brandوقتی بخواهید بگیرید، 
 را می‌دهم. وقتی بخواهید تنظیم کنید،

04:51.230 --> 04:56.420
brandهر مقداری بدهید در متغیر عضو 
 ذخیره می‌کنم.

04:56.420 --> 04:59.690
_brandو اینجا می‌بینید قبلاً گفته بودید 
 را بازنویسی کنید.

05:04.970 --> 05:06.290
ولی حالا تغییر کرد و گفت:

05:06.290 --> 05:12.440
شما به متغیر خصوصی دسترسی ندارید.

05:12.440 --> 05:15.710
فقط property خودش دسترسی دارد.

05:15.710 --> 05:19.220
فقط property brand می‌تواند brand را تغییر دهد.

05:19.220 --> 05:27.710
_brandجای دیگری نباید مستقیم 
 را تغییر دهیم.

05:27.710 --> 05:32.540
propertyاگر بخواهید، باید از این محافظ یعنی 
 عبور کنید.

05:32.540 --> 05:40.130
brandچون 
 تعیین می‌کند چه کسی می‌تواند وارد شود.

05:40.130 --> 05:41.270
nullمثلاً می‌توانیم بگوییم فقط اگر مقداری غیر 
 بدهید قبول می‌کنم.

05:41.270 --> 05:48.260
یا فقط اگر رشته‌ای معتبر باشد، مثلاً طولش حداکثر ده کاراکتر باشد.

05:49.340 --> 05:55.400
فقط در آن صورت ورودی شما را قبول می‌کنم. این چیزی است که می‌توانیم خودمان تعریف کنیم.

05:55.400 --> 05:58.490
و این همان چیزی است که در ویدیوی بعدی می‌بینیم.

05:58.490 --> 05:59.840
پس تا آن موقع.
