1
00:00.110 --> 00:00.890
خوش برگشتید.

2
00:00.890 --> 00:08.000
خب، بیاید یه مثال دیگه از **delegate** رو بررسی کنیم تا یکم بیشتر درکش کنید، قبل از اینکه بریم سراغ

3
00:08.000 --> 00:12.560
**generics** و بعد ببینیم چطور یک الگوریتم **sorting** بنویسیم، که یک ویدیوی نسبتاً

4
00:12.560 --> 00:15.470
چالشی، اما خیلی مفیده.

5
00:15.470 --> 00:23.930
پس من یک **public delegate** ایجاد می‌کنم که **log handler** خواهد بود و فقط یک پیام **string** رو دریافت می‌کنه.

6
00:23.930 --> 00:24.530
خیلی ساده.

7
00:24.530 --> 00:25.430
چیز خیلی ساده‌ای.

8
00:25.430 --> 00:29.720
بعد اینجا یک **class** خواهم داشت که اسمش **logger** هست.

9
00:29.720 --> 00:29.930
باشه؟

10
00:29.930 --> 00:31.600
خب، این **class** قراره کار **logging** رو انجام بده.

11
00:31.600 --> 00:34.120
و چیزی که قراره داشته باشه، دو تا **method** هست.

12
00:34.120 --> 00:38.860
پس یکی به **console** با اون پیام **log** می‌کنه.

13
00:38.860 --> 00:44.410
و ما فقط می‌گیم: **console dot log** یا دو نقطه یا **console log**.

14
00:44.410 --> 00:46.000
شاید اینطوری بهتر باشه.

15
00:46.000 --> 00:48.190
و بعد پیام هرچی که هست. اوکی؟

16
00:48.190 --> 00:50.740
پس تا اینجای کار، چیز خیلی عجیبی نداریم.

17
00:50.740 --> 00:59.940
و بعد فرض کنیم یه **method** دیگه اینجا داریم: **public void log to** مثلاً **file**. اوکی؟

18
00:59.940 --> 01:03.960
پس اینجا هم اون پیام رو می‌گیرم: **string message**.

19
01:03.960 --> 01:08.010
و می‌خوام شبیه‌سازی کنم که دارم توی **file**، **logging** می‌کنم.

20
01:08.010 --> 01:13.170
پس می‌گم: **file log** و بعد دو نقطه و بعد هرچی که پیام هست. اوکی؟

21
01:13.170 --> 01:17.370
خب، هدف اینجا واقعاً فقط توضیح نحوه‌ی کار **delegate** هاست.

22
01:17.370 --> 01:22.010
نه خیلی در مورد مفهوم **logging to file** و این جور چیزا.

23
01:22.010 --> 01:25.670
قبلاً دیدیم که **logging to a file** چطوری کار می‌کنه، اما اینجا می‌خوام ساده نگه‌ش دارم.

24
01:25.670 --> 01:28.880
پس این **public delegate void log handler** رو داریم.

25
01:28.880 --> 01:33.770
و این **log handler** هیچی برنمی‌گردونه، اما یک **string** نیاز داره.

26
01:33.770 --> 01:40.760
پس اگه می‌خوایم از **log handler** استفاده کنیم، باید مطمئن بشیم **method**ی که بهش اختصاص می‌دیم، از همون

27
01:40.760 --> 01:43.010
**declaration** پیروی می‌کنه.

28
01:43.010 --> 01:47.110
همین **declaration** رو برای **log to console** و همچنین **log to file** داریم.

29
01:47.110 --> 01:50.680
اوکی، پس بیاید از اونا توی **main menu** استفاده کنیم.

30
01:50.890 --> 01:55.450
توی **main method** یک **logger** خواهم داشت که یک **new logger** خواهد بود.

31
01:55.450 --> 01:58.480
و یک **log handler** خواهم داشت.

32
01:58.480 --> 02:06.700
پس **log handler** که **my log handler** من خواهد بود و من **log to console** رو بهش اختصاص می‌دم.

33
02:06.700 --> 02:09.070
و این جزئی از **logger** خواهد بود. اوکی؟

34
02:09.070 --> 02:12.010
**Logger** و **log to console**.

35
02:12.040 --> 02:12.760
اوکی.

36
02:12.760 --> 02:17.890
پس این **delegate** منه، این **log handler**.

37
02:17.890 --> 02:21.550
و می‌بینید که می‌تونم **method** رو بدون پرانتز بهش اختصاص بدم.

38
02:21.550 --> 02:21.820
درسته؟

39
02:21.820 --> 02:23.200
دارم **method** رو **call** نمی‌کنم.

40
02:23.200 --> 02:25.180
دارم **method** رو اختصاص می‌دم.

41
02:25.180 --> 02:28.120
و بعد می‌تونم برم جلو و از اون **log handler** استفاده کنم.

42
02:28.120 --> 02:35.140
پس حالا می‌تونم از این **delegate** استفاده کنم و مثلاً فقط بگم: **logging to console**.

43
02:35.140 --> 02:39.090
حالا می‌گه: **console log logging to console** یا هرچی.

44
02:39.090 --> 02:39.870
مشکلی نیست.

45
02:39.870 --> 02:43.530
پس حالا اینو اجرا می‌کنیم و می‌بینیم چطور کار می‌کنه.

46
02:43.530 --> 02:47.130
و می‌بینید: **console log log into console**. اوکی؟

47
02:47.130 --> 02:52.110
حالا می‌تونیم **log handler**مون رو با یک **method** دیگه بازنویسی (override) کنیم.

48
02:52.110 --> 02:55.830
پس **logger** به **log to file**.

49
02:55.830 --> 03:01.680
پس حالا فقط می‌گیم: خب، یه **method** دیگه هست که اونم از همین **declaration** پیروی می‌کنه.

50
03:01.680 --> 03:03.260
من فقط اونو می‌فرستم.

51
03:03.260 --> 03:06.620
و می‌تونم دوباره از **log handler** استفاده کنم و یه چیزی رو **log** کنم.

52
03:06.620 --> 03:08.720
مثلاً: **log some some stuff**.

53
03:08.750 --> 03:09.260
اوکی.

54
03:09.260 --> 03:14.030
پس این چیزها روی یک **file**، **log** می‌شن.

55
03:14.030 --> 03:15.890
حداقل این هدف ماست، درسته؟

56
03:15.890 --> 03:19.130
پس دوباره اجراش می‌کنیم و قسمت اول رو می‌بینیم.

57
03:19.130 --> 03:20.840
توی **console**، **log** می‌کنه.

58
03:20.840 --> 03:23.150
و قسمت دوم توی **file**، **log** می‌کنه.

59
03:23.150 --> 03:25.880
پس می‌بینید که از کجا میاد.

60
03:25.880 --> 03:26.870
که توی **file**، **log** می‌کنه.

61
03:26.870 --> 03:30.250
خب معلومه که این می‌تونه تمام **logic**ای باشه که می‌خوایم استفاده کنیم.

62
03:30.250 --> 03:32.890
و این می‌تونه یه **logic** کاملاً جدید باشه که می‌خوایم استفاده کنیم.

63
03:32.890 --> 03:40.000
پس می‌بینید که یکم شباهت‌هایی به چیزی داره که موقع استفاده از **interface**ها دیدیم.

64
03:40.000 --> 03:41.650
اما واقعاً اون نیست، درسته؟

65
03:41.650 --> 03:42.670
یه چیز دیگه است.

66
03:42.670 --> 03:50.860
در واقع ما یک **method** داریم که یک **declaration** خاص داره و می‌تونیم ازش استفاده کنیم تا **method**های دیگه رو

67
03:50.860 --> 03:58.650
با هر **implementation** واقعی که می‌خوایم بهش اختصاص بدیم، و این حتی جالب‌تر و مرتبط‌تر می‌شه،

68
03:58.650 --> 04:05.520
و تفاوت با **interface**ها حتی واضح‌تر و قابل درک‌تر می‌شه وقتی از **multicast delegate**ها استفاده کنیم،

69
04:05.520 --> 04:10.350
که به ما اجازه می‌ده چندین **method** رو به یک **delegate** اختصاص بدیم.

70
04:10.380 --> 04:16.470
اوکی، پس این یک مثال خیلی ساده از نحوه‌ی استفاده از **delegate**ها بود.

71
04:16.710 --> 04:19.290
حالا بریم سراغ ویدیوی بعدی.