WEBVTT

00:00.140 --> 00:05.570
constتو این ویدیو یاد می‌گیرید که کلمه کلیدی 
readonly چطور کار می‌کنه، همین‌طور کلمه کلیدی 
 و اینکه

00:05.570 --> 00:06.920
چطور با هم مقایسه می‌شن.

00:06.920 --> 00:14.000
هر دوی این‌ها به شما اجازه می‌دن متغیری بسازید که فقط‌خواندنی و غیرقابل‌تغییر باشه.

00:14.000 --> 00:20.480
یعنی فیلدهایی که قابل تغییر نیستن، ولی در زمان مقداردهی اولیه و زمینهٔ .

00:20.480 --> 00:21.650
استفاده با هم فرق دارن

00:21.650 --> 00:25.340
بیایم هر دو رو بررسی کنیم تا کامل بفهمیم.

00:25.340 --> 00:31.700
public const int NumberOfCornersفرض کن من یه 
 دارم.

00:31.700 --> 00:37.250
Rectangleمثلاً یه مستطیل من اینجام توی کلاس 
  چهار گوشه داره.

00:37.250 --> 00:38.210
و این مقدار ثابتِ.

00:38.210 --> 00:43.580
مهم نیست چه مستطیلی بسازم، همیشه چهار گوشه داره.

00:43.580 --> 00:52.640
از طرف دیگه می‌تونم یه 
 داشته باشم public readonly string Color

00:52.640 --> 01:00.380
و رنگ مستطیل توی این مثال باید یا هنگام تعریف مقداردهی بشه یا داخل سازنده.

01:00.380 --> 01:01.130
 (constructor)

01:01.130 --> 01:03.860
پس اینجا اعلان فیلده.

01:03.860 --> 01:06.380
همین موضوع برای اینجا هم صدق می‌کنه.

01:06.380 --> 01:10.670
constحالا یه 
 باید هنگام زمان کامپایل مقداردهی اولیه بشه.

01:10.670 --> 01:18.140
یعنی باید هنگام کامپایل یک مقدار بهش داده بشه، که یعنی مستقیم در کد و همون خطی که ساخته می‌شه.

01:18.140 --> 01:19.040
readonlyبرای 
 نمی‌تونید از یه متد استفاده کنید که بهش مقدار بده.

01:19.040 --> 01:24.770
اشکالی نداره اگر فقط در زمان اجرا مقداردهی بشه، یعنی وقتی که فقط هنگام اجرا مقدار می‌گیره.

01:24.770 --> 01:32.390
runیعنی وقتی داریم اپ رو اجرا می‌کنیم یا روی دکمه 
 کلیک می‌کنیم.

01:32.390 --> 01:35.870
پس کی رنگ رو مقداردهی می‌کنم؟

01:35.870 --> 01:40.310
خب، می‌تونم این کار رو داخل سازنده انجام بدم.

01:40.310 --> 01:42.320
پس بیایم سریع یه سازنده درست کنیم.

01:42.320 --> 01:46.700
پس برای مستطیل و می‌گیم هر بار که یه مستطیل جدید می‌سازیم، باید یه رنگ اختصاص بدیم.

01:46.700 --> 01:52.700
و رنگی که به مستطیل من اختصاص داده می‌شه، رنگ همون مستطیل خاص خواهد بود.

02:03.230 --> 02:09.200
با این حال، هر مستطیل چهار گوشه خواهد داشت.

02:09.200 --> 02:13.370
پس این هم یکی از تفاوت‌های 
const و readonlyه.

02:13.370 --> 02:20.240
constپس 
 برای همهٔ نمونه‌های یه کلاس یکسان خواهد بود.

02:20.240 --> 02:29.030
readonlyولی یه متغیر 
 می‌تونه متفاوت باشه یا برای هر نمونه از.

02:29.030 --> 02:29.690
 اون کلاس متفاوت باشه

02:29.690 --> 02:33.530
پس بیایم ببینیم این واقعاً چطور عمل خواهد کرد.

02:33.530 --> 02:36.290
display detailsپس من این متد 
 رو ایجاد کردم.

02:36.290 --> 02:40.550
و کاری که انجام می‌ده اینه که جزئیات یه مستطیل رو نمایش می‌ده.

02:40.550 --> 02:44.780
program.csحالا بیایم چند مستطیل توی فایل 
 بسازیم.

02:44.780 --> 02:49.550
پس اینجا یه مستطیل می‌سازم که اسمش رو می‌ذارم rectangle one.

02:49.550 --> 02:52.430
و این یک مستطیل جدید خواهد بود.

02:52.550 --> 02:54.470
و باید یه رنگ بهش اختصاص بدم.

02:54.470 --> 02:57.200
پس می‌گم چیزی مثل قرمز.

02:57.200 --> 03:01.490
و بعد یه مستطیل دیگه می‌سازم که آبی باشه، باشه؟

03:01.490 --> 03:04.490
آبی خواهد بود.rectangle twoپس 
 
03:04.490 --> 03:12.350
حالا کاری که می‌خواهم انجام بدهم این است که از
 rectangle one.dot display details و rectangle two

03:12.380 --> 03:14.210
display details استفاده کنم.

03:14.210 --> 03:17.540
و حالا اگر این را اجرا کنیم، تفاوت بین آنها را خواهیم دید.

03:17.540 --> 03:24.770
پس می‌بینیم که رنگشان متفاوت است اما تعداد گوشه‌ها همان است.

03:24.770 --> 03:29.480
و این واقعاً یکی از نکات اصلی تفاوت بین کلیدواژه‌های 
 استconst و read only

03:29.480 --> 03:34.430
پس این یک مقدار ثابت است که برای هر مستطیلی که ایجاد می‌کنیم یکسان خواهد بود.

03:34.430 --> 03:40.940
read only  و این 
متفاوت خواهد بود یا می‌تواند برای هر مستطیل متفاوت باشد، زیرا 

03:40.940 --> 03:43.400
ما فقط آن را مقداردهی اولیه می‌کنیم.

03:43.400 --> 03:48.740
یعنی مقداردهی به آن در لحظه‌ای که مستطیل را ایجاد می‌کنیم.

03:48.740 --> 03:50.390
یعنی در داخل سازنده.

03:50.390 --> 03:53.750
پس بیایید امتحان کنیم و رنگ را جای دیگری تغییر دهیم.

03:53.750 --> 03:59.720
مثلاً اینجا سعی کنیم مقداری مثل خاکستری اختصاص دهیم.

03:59.720 --> 04:01.310
می‌بینید که کار نمی‌کند.

04:01.310 --> 04:07.940
read onlyپس پیامی که می‌دهد این است که یک فیلد 
 نمی‌تواند مقداری بگیرد مگر در سازنده یا 
init only setter

04:07.940 --> 04:11.630
برای نوعی که فیلد در آن تعریف شده است، یا مقداردهی اولیه متغیر.

04:11.630 --> 04:17.570
پس چند کلیدواژه هست که هنوز بررسی نکردیم، اما می‌بینید که فقط می‌توان مقداری به آن اختصاص داد

04:17.570 --> 04:21.530
یا آن را در سازنده یا مستقیماً اینجا مقداردهی کرد.

04:21.530 --> 04:27.260
می‌توانستم بگویم که به طور پیش‌فرض همه رنگ‌ها آبی هستند، و سپس در هنگام.

04:27.260 --> 04:30.770
 ایجاد مستطیل واقعی مقدار متفاوتی دریافت کنند

04:30.770 --> 04:39.140
پس نکته دیگری که باید بررسی شود این است که می‌بینید 
const و read only متغیرهای
 با حروف بزرگ استفاده می‌شوند.

04:39.140 --> 04:40.460
number of corners و colorپس 
 هر دو با حرف بزرگ شروع می‌شوند.

04:40.460 --> 04:45.470
پس این چیزی است که هنگام نامگذاری باید به آن توجه کنید.

04:45.470 --> 04:53.810
با این حال، یک مورد وجود دارد که این قرارداد نامگذاری را نادیده می‌گیرد.

04:53.810 --> 04:59.360
 read onlyو آن این است که، برای مثال، اگر یک فیلد
 داشته  (private)باشید که یک فیلد خصوصی
 برای آن متغیر خاص باشد.

04:59.580 --> 05:02.700
پس این.

05:02.700 --> 05:03.750
IDاینجا می‌بینید این 
 نیاز به زیرخط (_) دارد و با حرف کوچک نوشته می‌شود.

05:03.750 --> 05:10.200
این به این دلیل است که این قرارداد نامگذاری در اینجا، قرارداد نامگذاری آنجا را نادیده می‌گیرد، اما فقط در

05:10.200 --> 05:15.810
باشد.privateحالتی که فیلد 
 
05:15.810 --> 05:17.400
پس این هم از این ویدیو بود.

05:17.400 --> 05:19.860
در ویدیوی بعدی می‌بینمتان.

05:19.860 --> 05:21.150
خدانگهدار.


