WEBVTT

00:00.140 --> 00:01.070
خوش اومدید.

00:01.070 --> 00:06.110
readonlyتوی این ویدیو می‌خوایم به کلیدها  و همچنین کلمه‌کلیدی 
 نگاه کنیم.

00:06.110 --> 00:07.310
خب، کلیدها چی هستن؟

00:07.310 --> 00:12.140
کلید در واقع شناسه‌ی یکتا  داخل یک دیتابیسه.

00:12.140 --> 00:14.300
البته ما هنوز با دیتابیس‌ها کار نمی‌کنیم.

00:14.300 --> 00:21.500
ولی چون داریم با مشتری‌ها سروکار داریم، فکر کردم خوبه که توضیح بدم IDها چطور کار می‌کنن،

00:21.500 --> 00:27.320
staticچون یاد گرفتیم که یه کلمه‌کلیدی 
 داریم که اجازه میده خودش رو هر بار با ایجاد یک مشتری جدید

00:27.320 --> 00:32.330
افزایش بده، که می‌تونیم از اون مثلا به عنوان یه کلید استفاده کنیم.

00:32.330 --> 00:36.560
ایده‌ی پشت کلید اینه که به هر ورودی یک ویژگی یکتا بده.

00:36.560 --> 00:41.150
پس توی مثال ما، به هر مشتری چیزی منحصر به فرد داده میشه، چون ممکنه

00:41.150 --> 00:48.260
John Doeاسم مشتری 
 باشه، اما تو دیتابیس میلیون‌ها نفر، 

00:48.260 --> 00:50.930
John Doe ده‌ها یا حتی صدها 
داشته باشیم.

00:50.930 --> 00:53.270
خب، اون وقت باید باهاشون چی کار کنیم؟

00:53.270 --> 00:55.790
کدومیه؟ John Doeچطور بفهمیم کدوم

00:55.790 --> 00:59.390
اینجاست که کلید وارد میشه، چون یه شناسه‌ی یکتا فراهم می‌کنه.

00:59.390 --> 01:04.550
 IDو معمولا همون
 ـه، یعنی یه عددی که به ورودی اختصاص میدی.

01:04.550 --> 01:06.740
خب، حالا بریم و اونو راه‌اندازی کنیم.

01:06.740 --> 01:15.530
private static intخب، من یه 
nextID به اسم 
 می‌سازم که مقدارش رو برابر صفر قرار می‌دم.

01:15.530 --> 01:19.940
staticاین میشه یه فیلد 
بعدی رو نگه داره.ID که قراره مقدار 
 
01:20.120 --> 01:23.480
staticایده اینه که این فیلد 
 ـه، درسته.

01:23.480 --> 01:27.590
پس جزئی از هر آبجکت مشتری نیست.

01:27.590 --> 01:30.590
در واقع یه جورایی خارج از هر آبجکت مشتری قرار داره.

01:30.590 --> 01:31.160
درسته.

01:31.160 --> 01:35.630
IDخب حالا چطور برای هر مشتری یه 
 اختصاص بدیم؟

01:35.630 --> 01:40.220
private readonlyکاری که می‌کنیم اینه که یه متغیر 
 درست می‌کنیم.

01:40.220 --> 01:41.420
این کلمه کلیدی  هست.

01:41.420 --> 01:46.010
readonly intیه 
تعریف می‌کنم.underscoreID با اسم 

01:46.190 --> 01:55.010
این قراره شناسه‌ی یکتا باشه که برای هر کاربری که می‌سازیم متفاوته.

01:55.010 --> 02:01.820
ایده اینه که حتی اگه مثلا پنج کاربر بسازید و کاربر سوم رو حذف کنید، روند IDها همچنان ادامه پیدا می‌کنه.

02:01.820 --> 02:02.810
اینطوری:

02:02.810 --> 02:04.340
شما یه مشتری می‌سازید.

02:04.370 --> 02:06.980
اون مشتری ID صفر داره.

02:07.010 --> 02:10.490
مشتری بعدی که می‌سازید ID یک می‌گیره، بعدی دو.

02:10.520 --> 02:13.940
حالا فرض کنید اون با ID دو رو حذف کنید.

02:13.970 --> 02:18.290
مشتری بعدی که بسازید دیگه ID دو نمی‌گیره، بلکه ID سه می‌گیره.

02:18.320 --> 02:23.720
چون هر ورودی جدید همیشه یه ID افزایشی دریافت می‌کنه.

02:23.720 --> 02:31.040
IDخب حالا چطوری این 
مشتری اختصاص بدیم؟ID رو افزایش بدیم و به 
 
02:31.040 --> 02:38.150
underscoreIDمی‌تونیم بریم توی سازنده‌ی پیش‌فرض، و بگیم 
 برابر بشه با 

02:38.150 --> 02:40.280
nextID++.

02:40.280 --> 02:44.270
این ++ مطمئن میشه که مقدار افزایش پیدا می‌کنه.

02:44.270 --> 02:48.650
یعنی اول مقدار صفر رو اختصاص می‌ده و بعد اون رو یکی زیاد می‌کنه.

02:48.650 --> 02:51.710
nextIDاین همون کاریه که ++ بعد از 
 انجام می‌ده.

02:51.710 --> 02:54.680
قبلا هم در دوره دیدیم که افزایش دادن چطور کار می‌کنه.

02:54.680 --> 02:59.450
حالا نباید فراموش کنیم که همین کار رو توی همه‌ی سازنده‌ها انجام بدیم.

02:59.450 --> 03:02.750
مثلا اینجا داخل سازنده‌ی دیگه‌مون.

03:02.750 --> 03:08.360
این سازنده‌ی اختصاصی ما هست، درسته.

03:08.360 --> 03:09.500
اونجا هم نباید یادمون بره.

03:09.500 --> 03:12.410
سازنده‌ی دیگه‌ای نداریم، پس همین کافیه.

03:12.410 --> 03:19.700
IDایده اینجاست که داریم 
 رو تنظیم می‌کنیم و دیگه نمی‌تونیم بعداً اون رو برای هیچ مشتری تغییر بدیم،

03:19.700 --> 03:22.580
تعریف شده.readonly چون 

03:22.580 --> 03:32.000
فقط یک بار می‌تونه مقداردهی بشه.readonly این متغیر 
 
03:32.000 --> 03:37.880
یعنی فقط یک بار می‌تونه یه مقدار بگیره و بعدش دیگه نمی‌تونیم مقدار جدیدی بهش بدیم.

03:37.880 --> 03:44.810
کاری که ما می‌کنیم اینه که مقدار رو داخل یکی از سازنده‌هامون تعیین می‌کنیم.

03:44.810 --> 03:47.750
و این سازنده‌ها نمی‌تونن پشت سر هم فراخوانی بشن.

03:47.750 --> 03:49.580
فقط یکی‌شون صدا زده می‌شه.

03:49.580 --> 03:53.510
پس یا این یکی یا اون یکی در مثال ما، چون دو تا سازنده داریم.

03:53.510 --> 03:56.900
اگه پنج تا سازنده داشتیم، باید این خط رو توی همه‌شون اضافه می‌کردیم.

03:56.900 --> 04:04.850
با این کار، هر مشتری یه شناسه‌ی منحصر‌به‌فرد می‌گیره.

04:05.060 --> 04:05.840
خب.

04:05.840 --> 04:12.050
privateحالا این شناسه 
 هست و فقط داخل همین کلاس قابل دسترسیه.

04:12.050 --> 04:15.380
ولی می‌تونیم جزئیات کاربر رو برگردونیم.

04:15.380 --> 04:24.320
publicمثلا می‌تونیم یه متد 
readDetails به اسم 
getDetails بسازیم، یا حتی 
 هم می‌تونه اسم مناسبی باشه.

04:24.320 --> 04:24.800
فرقی نداره.

04:24.800 --> 04:25.970
getDetails یا حتی writeDetails.

04:25.970 --> 04:28.850
هر کدوم از اینا قابل قبوله.

04:28.850 --> 04:37.070
Console.WriteLineاینجا فقط می‌نویسیم 
 و جزئیات مشتری رو نمایش می‌دیم.

04:37.070 --> 04:41.990
و می‌تونیم اینطوری استفاده کنیم:

04:41.990 --> 04:50.000
name is ... و بعد ID is ... .

04:50.000 --> 04:52.910
اینجا هم از _id استفاده می‌کنیم.

04:52.910 --> 04:55.340
چون readonly و private هست.

04:55.340 --> 04:58.340
پس فقط داخل همین کلاس در دسترسه.

04:58.340 --> 04:59.750
می‌تونه اون رو بگیره.getDetailsاما متد 
 
04:59.920 --> 05:01.720
و نمایش بده.

05:01.990 --> 05:02.650
خب.

05:02.650 --> 05:06.310
حالا بریم سراغ فایل Program.cs.

05:06.310 --> 05:09.820
و یه مشتری بسازیم.

05:09.820 --> 05:14.170
مثلا customer1 = new Customer.

05:14.170 --> 05:20.080
و بعد یه مشتری دیگه بسازیم به اسم customer2.

05:20.080 --> 05:22.930
customer2 و برای 
حالا جزئیات رو نمایش بدیم.

05:22.930 --> 05:25.960
پس می‌دونیم که چندتا سازنده مختلف وجود داره.

05:25.960 --> 05:28.360
وقتی روش هاور کنیم، می‌گه multiple overloads.

05:28.360 --> 05:33.430
یعنی سازنده‌های مختلفی برای استفاده داریم.

05:33.430 --> 05:40.540
وارد کنیم.John Doeاینجا می‌تونیم یا از سازنده پیش‌فرض استفاده کنیم یا اطلاعاتی مثل 

05:40.540 --> 05:42.760
و بعد هم آدرس رو اضافه کنیم.

05:42.760 --> 05:44.260
ولی لازم نیست حتماً این کارو کنیم.

05:44.260 --> 05:48.040
چون آدرس و شماره تماس به صورت پیش‌فرض مشکلی ندارن.

05:48.040 --> 05:55.360
customer1.getDetailsحالا می‌تونیم 
 customer2.getDetails رو صدا بزنیم و همینطور .

05:55.360 --> 05:59.080
ببینیم چه خروجی می‌گیریم.

05:59.080 --> 06:01.150
چون همونطور که می‌بینیم، شناسه رو برمی‌گردونه.

06:01.360 --> 06:07.060
مشتری اول شناسه صفر می‌گیره و مشتری دوم شناسه یک.

06:07.060 --> 06:12.820
حالا اگه مشتری سوم و چهارم و به همین ترتیب بسازیم، هر کدوم شناسه بعدی رو می‌گیرن.

06:12.820 --> 06:16.600
یعنی به ترتیب یکی یکی اضافه می‌شه.

06:16.750 --> 06:20.890
customer3پس بیاید برای 
رو اجرا کنیم.getDetails هم 
 
06:20.920 --> 06:23.710
و ببینیم چه نتیجه‌ای می‌ده.

06:23.710 --> 06:29.620
و اینم جزئیات مشتری: نام = customer و شناسه = دو.

06:29.620 --> 06:34.270
اینجا داریم شناسه رو کاملاً مخفی نگه می‌داریم.

06:34.270 --> 06:36.940
یعنی فقط داخل کلاس می‌شه بهش دسترسی داشت.

06:36.940 --> 06:43.360
ولی می‌تونیم متدهایی بسازیم که مقدارش رو به بیرون نشون بدن، نه خود متغیر رو.

06:43.360 --> 06:45.400
فقط مقدارش در دسترس قرار می‌گیره.

06:45.700 --> 06:49.780
متغیر رو مستقیم نمی‌شه بیرون آورد، فقط مقدارش قابل استفاده‌ست.

06:49.780 --> 06:54.100
خب، اینم از کلیدواژه read only.

06:54.100 --> 07:01.960
IDو این هم شناسه یکتای 
 که هر بار با ساختن مشتری جدید یکی یکی زیاد می‌شه.

07:01.960 --> 07:12.280
staticچون این متغیر 
customer نیازی به شیء 
 نداره تا وجود داشته باشه، بلکه خارج از هر شیء مشتری

07:12.280 --> 07:17.230
به صورت کلی وجود داره.

07:17.230 --> 07:19.810
خب، اینم از این ویدیو.

07:19.810 --> 07:24.100
توی ویدیوی بعدی می‌خوام نشونتون بدم چطوری می‌شه 
های فقط‌خواندنی هم ساختproperty

07:24.100 --> 07:25.420
پس می‌بینمتون اونجا.
