WEBVTT

00:00.110 --> 00:03.770
به مثال‌های عملی استفاده از کلاس‌ها خوش آمدید.

00:03.770 --> 00:09.890
پس بیایید یک کنسول اپلیکیشن جدید بسازیم که اسمش را  classes app.می‌گذارم 

00:09.890 --> 00:13.100
و بعد این چک‌باکس را انتخاب می‌کنم.

00:13.100 --> 00:15.980
این خیلی مهم است چون در غیر این صورت کمی سخت می‌شود.

00:15.980 --> 00:21.410
پس وقتی گزینه 
"Do not use top level statements"
Create فعال باشد روی 
 کلیک می‌کنم و یک پروژه جدید می‌سازم.

00:21.410 --> 00:26.000
 classاینجا می‌بینید که همین حالا هم کلمه کلیدی
 در برنامه ما وجود دارد.

00:26.000 --> 00:31.460
و این به این دلیل است که سی‌شارپ یک زبان برنامه‌نویسی  Programشی‌ء‌گرا است که این کلاس 
 را دارد،

00:31.460 --> 00:34.880
Mainکه نقطه شروع برنامه ماست و متد 
 خودش را دارد.

00:34.880 --> 00:37.430
همان جایی است که کد اجرا می‌شود.

00:37.430 --> 00:41.030
پس این کدی است که نقطه شروع اپلیکیشن ماست.

00:41.030 --> 00:43.670
کلیک کنیم اجرا خواهد شد.Runو وقتی روی 

00:43.670 --> 00:44.240
خب.

00:44.240 --> 00:46.610
حالا چطور می‌توانیم یک کلاس جدید بسازیم؟

00:46.610 --> 00:47.960
چون موضوع همین است.

00:47.960 --> 00:50.420
ما دیدیم چطور از این بخش برنامه استفاده کنیم.

00:50.420 --> 00:55.610
Solution Explorerخب، برای ایجاد یک کلاس جدید می‌توانید 
 را باز کنید با کلیک روی 

00:55.610 --> 00:57.230
View Solution Explorer.

00:57.230 --> 01:01.280
و اینجا در سمت راست می‌توانید روی پروژه خود راست‌کلیک کنید.

01:01.280 --> 01:03.980
بروید.Addو سپس می‌توانید به گزینه 

01:03.980 --> 01:06.980
و اینجا در پایین گزینه کلاس را انتخاب کنید.

01:06.980 --> 01:09.470
و حالا می‌توانید برای این کلاس یک نام بگذارید.

01:09.470 --> 01:11.540
می‌نامم.Carپس من این کلاس را  

01:11.540 --> 01:13.970
خواهد بود.car.cs پس فایل آن 

01:13.970 --> 01:15.470
کلیک می‌کنم.Addحالا روی 
 
01:15.470 --> 01:18.890
(boilerplate code)
و می‌بینید این کلاس یک سری کد پیش‌فرض 
 دارد.

01:18.890 --> 01:23.120
پس کدی است که فقط آنجاست و تغییرناپذیر است.  

01:23.120 --> 01:27.230
ها است.using directive برای مثال شامل آن 

01:27.230 --> 01:31.340
خب، می‌توانیم آن‌ها را حذف کنیم چون در این مرحله از آن‌ها استفاده نمی‌کنیم.  

01:31.340 --> 01:33.350
اما خوب است که همان‌طور باقی بمانند.  

01:33.350 --> 01:35.240
 کنید. (collapse)پس فقط آن‌ها را جمع 
  
01:35.240 --> 01:42.170 
classesApp به نامnamespace بعد این 
 Program، را داریم، که همان  کلاسی است که قبلاً داشتیم به نام  

01:42.170 --> 01:44.360
که به‌طور خودکار برای ما ساخته شده بود.  

01:44.360 --> 01:48.140
و حالا کلاس خودمان را داریم به نام Car.  

01:48.140 --> 01:52.850
پس اینجا کلیدواژه class را می‌بینید و بعد اسم Car را.  

01:52.850 --> 01:58.610
Visual Studioاگر این رنگ بنفش را در 
 ببینید، یعنی دارید به یک کلاس نگاه می‌کنید.  

01:58.610 --> 02:00.260
پس اینجا هم می‌توانید آن را ببینید.  

02:00.260 --> 02:03.950
Programکلاس 
 Console. هم رنگ بنفش دارد و همین‌طور   

02:03.950 --> 02:06.560
هم یک کلاس است. Consoleپس می‌بینید که 
  
02:06.560 --> 02:14.750
internalاین کلاس 
 assembly است، که فقط یعنی می‌تواند از داخل همان 
در دسترس باشد.  

02:14.750 --> 02:19.850
assembly و 
 را اگر خیلی ساده بگوییم، یعنی همان برنامه‌ای که در آن قرار داریم.  

02:19.850 --> 02:20.120
خب.

02:20.120 --> 02:22.760
پس ما فقط می‌توانیم از این کلاس در داخل همان برنامه استفاده کنیم.  

02:22.760 --> 02:25.160
برنامه‌های دیگر نمی‌توانند به این کلاس دسترسی داشته باشند.  

02:25.160 --> 02:28.280
internalاین همان کاری است که کلیدواژه 
 برای ما انجام می‌دهد.  

02:28.280 --> 02:35.930
حالا اگر وارد کلاس خود شوید، می‌بینید که خودش یک تکه کد آماده برای شما می‌گذارد یا پیشنهاد  

02:35.930 --> 02:38.930
public Carمی‌کند که از 
 و سپس آکولاد باز و بسته استفاده کنید.  

02:38.930 --> 02:43.250
constructorاین چیزی که اینجا می‌بینید به آن 
 یا سازنده گفته می‌شود.  

02:43.250 --> 02:49.820
constructorیک 
 خیلی شبیه به یک متد است، اما فرقش این است که دقیقاً همان نام کلاس را دارد  

02:49.820 --> 02:55.070
و هیچ نوع مقدار بازگشتی  ندارد.  

02:55.070 --> 03:04.400
این constructor هر زمان که یک شیء جدید از کلاس Car ساخته شود، فراخوانی یا اجرا می‌شود.  

03:04.400 --> 03:06.830
خب، حالا همه‌ی این‌ها چه معنایی دارد؟  

03:06.830 --> 03:13.700
بیایید با یک مثال عملی واقعی این را بررسی کنیم تا ببینید که چگونه در عمل اتفاق می‌افتد.  

03:13.700 --> 03:21.710
Console.WriteLineاینجا من فقط از یک دستور 
 استفاده می‌کنم که داخل آن می‌نویسم:  

03:21.740 --> 03:23.990
«یک شیء از کلاس Car ساخته شد.»  

03:23.990 --> 03:24.530
خب.  

03:24.530 --> 03:30.980
constructor پس این همان چیزی است که این 
 باید اجرا کند Carوقتی که یک شیء از 
 ساخته می‌شود.  

03:30.980 --> 03:36.740
پس اساساً این کدی که اینجاست، هر چیزی که داخل آکولادها قرار دارد، هر بار که ما  

03:36.740 --> 03:41.150
یک آیتم یا شیء جدید از نوع Car بسازیم، اجرا خواهد شد.  

03:41.150 --> 03:42.110
خب چطور این کار را انجام دهیم؟  

03:42.110 --> 03:44.300
 را ذخیره کنیم.  Carبیایید کلاس 

03:44.300 --> 03:46.400
برویم سراغ کلاس Program.  

03:46.400 --> 03:55.130
و اینجا بیایید یک شیء از کلاس خودمان یعنی کلاس Car ایجاد کنیم. پس می‌توانیم بنویسیم Car.  

03:55.130 --> 03:56.330
و بعد به آن یک نام بدهیم و سپس بگوییم new Car.  

03:56.330 --> 04:00.170
من قرار است این Car را Audi صدا کنم.  

04:00.170 --> 04:03.020
خب.  

04:03.170 --> 04:03.620
پس این فقط یک Audi خواهد بود که یک Car جدید است.  

04:03.620 --> 04:07.370
new پس با این کلمه کلیدی 
، که قبلاً هم دیده بودیم،  

04:07.370 --> 04:10.790
Carدر واقع فضایی در حافظه برای شیء 
 ما اختصاص داده می‌شود.  

04:10.790 --> 04:18.350
از نظر فنی، ما داریم می‌گوییم: یک شیء بساز که طبق نقشه یا طرح (blueprint) کلاس Car من باشد.  

04:18.350 --> 04:26.210
یا نقشه چیست؟blueprint حالا 
   
04:26.210 --> 04:34.490
 blueprint در واقع همان دستورالعمل‌ها و قوانینی است که ما تعریف می‌کنیم تا مشخص کنیم این کلاس  

04:34.490 --> 04:35.300
چطور باید رفتار کند.  

04:35.300 --> 04:38.300
و این چیزی است که در اینجا تعریف می‌کنیم.

04:38.300 --> 04:43.370
پس در این کلاس می‌توانیم آن را به عنوان الگوی خود تنظیم کنیم.

04:43.370 --> 04:49.220
و هر بار که یک شی از آن بسازیم، از قوانینی که در این...

04:49.220 --> 04:50.090
الگو.

04:50.090 --> 04:50.780
خوب.

04:50.780 --> 04:58.010
پس در این مورد، تنها قاعده‌ای که تا حالا تعریف کرده‌ایم این است که هر وقت یک شی از

04:58.010 --> 04:59.600
خودرویی که می‌خواهیم.

04:59.800 --> 05:05.140
این دستور اجرا شود، که در آن ما فقط چیزی را در کنسول چاپ می‌کنیم که می‌گوید یک شی از خودرو

05:05.140 --> 05:06.490
ایجاد شده است.

05:06.490 --> 05:11.050
پس این سازنده هنگام اجرای این خط فراخوانی می‌شود.

05:11.050 --> 05:17.110
Console.ReadKeyپس اجازه دهید اینجا 
 را اضافه کنم تا برنامه‌مان متوقف نشود.

05:17.110 --> 05:20.620
و اجازه دهید اینجا یک نقطه دیباگ اضافه کنم.

05:20.620 --> 05:24.250
بیایید اجرا کنیم تا ببینید چه اتفاقی می‌افتد.

05:24.250 --> 05:27.520
پس می‌بینیم هیچ چیزی روی کنسول نوشته نشده است.

05:27.520 --> 05:32.350
ما به این خط کد می‌رسیم که می‌گوید car Audi new car.

05:32.350 --> 05:36.610
پس یک شی جدید از کلاس car ما ایجاد می‌شود.

05:36.610 --> 05:38.410
پس ما در این خط هستیم.

05:38.410 --> 05:46.510
سپس یک‌بار وارد  می‌شویم؛ یعنی وارد خط کدی می‌شویم که چیزی را اجرا می‌کند

05:46.510 --> 05:51.880
در جای دیگری، جایی که می‌بینید وارد کلاس car ما می‌شود.

05:51.880 --> 06:00.010
پس می‌بینید internal class car را و این خط را اجرا می‌کند که می‌گوید public car، که سازنده ماست،

06:00.010 --> 06:06.790
Console.WriteLineکه سپس در خط بعدی این دستور 
 را اجرا می‌کند.

06:06.790 --> 06:12.220
و وقتی اجرای کد سازنده تمام شد، به اینجا برمی‌گردد.

06:12.220 --> 06:15.040
حالا در خط بعدی یک Audi داریم.

06:15.040 --> 06:21.100
می‌بینید اگر نشانگر را روی Audi ببرید، می‌گوید Audi شامل classes app.car است.

06:21.100 --> 06:23.020
پس این یک شی از کلاس car است.

06:23.020 --> 06:26.320
و سپس خط بعدی را اجرا می‌کند که همان «سلام دنیا» است.

06:26.320 --> 06:30.400
پس اگر حالا به این نگاه کنیم می‌بینیم یک شی از کلاس car ایجاد شده است.

06:30.400 --> 06:32.500
و سپس می‌گوید سلام دنیا.

06:32.500 --> 06:33.340
خوب.

06:33.340 --> 06:46.030
پس حالا اینجا همان جایی است که ایجاد یک شی از کلاس car یا ایجاد یک نمونه از کلاس

06:46.030 --> 06:46.810
کلاس car.

06:46.810 --> 06:47.230
خوب.

06:47.230 --> 06:49.600
پس این یک راه دیگر برای گفتن آن است.

06:49.600 --> 06:53.680
اما این اولین شی کوچک ماست و ما آن را Audi نامیدیم.

06:53.680 --> 06:59.920
newو با این کلمه کلیدی 
 به آن مقدار دادیم چون قبل از آن فقط یک پوسته خالی بود.

06:59.920 --> 07:02.440
carو حالا یک شی 
 جدید به آن اختصاص دادیم.

07:02.440 --> 07:07.870
 Audiما مقداری فضا در حافظه اختصاص دادیم و حالا این
 را در دسترس قرار دادیم.

07:07.870 --> 07:13.930
خوب، فقط یک نکته آخر، بیایید یک شی دیگر از car بسازیم.

07:13.930 --> 07:16.870
پس من قرار است یک شی car دیگر ایجاد کنم.

07:16.870 --> 07:22.930
این یکی BMW خواهد بود که آن هم یک car جدید است.

07:22.930 --> 07:29.440
پس اگر الان این کد را اجرا کنیم می‌بینیم که فقط می‌گوید یک شی از car یا چه گفتیم اینجا؟

07:29.440 --> 07:35.350
یک شی از car ایجاد شده است و این دوبار نشان داده می‌شود چون ما دو شی می‌سازیم و هر دو

07:35.350 --> 07:38.860
اشیاء فعلاً اصلاً تغییر نکرده‌اند.

07:38.860 --> 07:40.960
اما این چیزی است که می‌توانیم تغییر دهیم.

07:40.960 --> 07:45.580
می‌توانیم اطلاعاتی که یک car درباره خود دارد را تغییر دهیم.

07:45.580 --> 07:47.440
پس می‌توانیم آن را تغییر دهیم.

07:47.440 --> 07:49.750
یک Audi می‌داند که خودش Audi است.

07:49.750 --> 07:52.930
و بعد BMW می‌داند که خودش BMW است.

07:52.930 --> 07:56.650
و این چیزی است که در ویدیوی بعدی به آن می‌پردازیم.

07:56.650 --> 07:58.120
پس آنجا می‌بینمتان.