یه تابستون متفاوت با یه تصمیم هوشمندانه! دوره هوش مصنوعی یه تابستون متفاوت با یه تصمیم هوشمندانه! دوره هوش مصنوعی
🎯 ثبت نام
بستن تبلیغات
تسلط کامل بر سی‌شارپ با یک دوره پروژه‌محور

یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شی‌گرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفه‌ای و امکانات کامل!

مشاهده بیشتر
تسلط جامع بر MVC Core برای توسعه وب حرفه‌ای

یادگیری MVC Core از مبانی تا پیشرفته: شی‌گرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژه‌های کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!

مشاهده بیشتر

Generic ها و ساخت آن در C#

Generic ها

با استفاده از Generic ها می‌توانید مشخصات نوع داده‌ی عناصر برنامه‌نویسی را در یک کلاس یا یک متد تعریف کنید. به شرط آن که این نوع واقعاً در برنامه استفاده شده باشد. به بیان دیگر با استفاده از Generic ها می‌توانید کلاس یا متدی را بنویسید که بتواند در کنار هر نوع داده‌ای کار کند.
جهت نوشتن مشخصات کلاس یا متد، باید از پارامترهای جایگزین برای نوع داده‌ها استفاده کنید. زمانی که کامپایلر به سازنده‌ی کلاس یا با فراخوان تابع یک متد برخورد می‌کند، جهت کنترل نوع مشخص داده، کدی را تولید می‌کند. با استفاده از مثال ساده‌ی زیر می‌توان این مطلب را بهتر بیان کرد:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
namespace GenericApplication {
 public class MyGenericArray< T > {
 private T[] array;
       
 public MyGenericArray(int size) {
 array = new T[size + 1];
 }
 public T getItem(int index) {
 return array[index];
 }
 public void setItem(int index, T value) {
 array[index] = value;
 }
 }
 class Tester {
 static void Main(string[] args) {
          
//declaring an int array
 MyGenericArray< int > intArray = new MyGenericArray< int >(5);
          
//setting values
 for (int c = 0; c <  5; c++) {
 intArray.setItem(c, c*5);
 }
          
//retrieving the values
 for (int c = 0; c <  5; c++) {
 Console.Write(intArray.getItem(c) + " ");
 }
          
 Console.WriteLine();
          
//declaring a character array
 MyGenericArray< char > charArray = new MyGenericArray< char >(5);
          
//setting values
 for (int c = 0; c <  5; c++) {
 charArray.setItem(c, (char)(c+97));
 }
          
//retrieving the values
 for (int c = 0; c<  5; c++) {
 Console.Write(charArray.getItem(c) + " ");
 }
 Console.WriteLine();
          
 Console.ReadKey();
 }
 }
}
<button></button>

زمانی که کد بالا کامپایل و اجرا شود، نتیجه به صورت زیر نمایش داده می‌شود:

1
2
3
0 5 10 15 20
a b c d e
<button></button>

ویژگی‌های Generic ها

Generic ها تکنیک‌هایی هستند که با استفاده از آن‌ها می‌توانید برنامه‌ی خود را به صورت‌های زیر توسعه دهید:

  • با استفاده از این تکنیک می‌توانید عملکرد، ایمنی نوع و استفاده‌ی مجدد کد خود را به حداکثر برسانید.
  • می‌توانید کلاس‌های مجموعه‌ای را به صورت Generic درآورید. کتابخانه‌ی کلاس فریمورک.NET در فضای نام System.Collections.Generic دارای چندین کلاس مجموعه‌ای Generic جدید است. می‌توانید به جای کلاس‌های مجموعه‌ای موجود در فضای نام System.Collections از این کلاس‌ها استفاده کنید.
  • می‌توانید رابط‌ها، کلاس‌ها، متدها، رویدادها و نماینده‌های Generic مخصوص به خود را ایجاد کنید.
  • می‌توانید کلاس‌های Generic ی را تولید کنید که محدود به دسترسی به متدهای نوع‌های خاصی از داده هستند.
  • می‌توانید اطلاعات نوع‌های استفاده شده در یک نوع Generic داده را با استفاده از انعکاس و در زمان اجرا دریافت کنید.

متدهای Generic

در مثال قبل از یک کلاس Generic استفاده کردیم؛ می‌توانیم به همراه یک پارامتر نوع متدهای Generic را اعلان کنیم. در برنامه‌ی زیر این مفهوم توضیح داده شده است:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
namespace GenericMethodAppl {
 class Program {
 static void Swap< T >(ref T lhs, ref T rhs) {
 T temp;
 temp = lhs;
 lhs = rhs;
 rhs = temp;
 }
 static void Main(string[] args) {
 int a, b;
 char c, d;
 a = 10;
 b = 20;
 c = 'I';
 d = 'V';
          
//display values before swap:
 Console.WriteLine("Int values before calling swap:");
 Console.WriteLine("a = {0}, b = {1}", a, b);
 Console.WriteLine("Char values before calling swap:");
 Console.WriteLine("c = {0}, d = {1}", c, d);
          
//call swap
 Swap< int >(ref a, ref b);
 Swap< char >(ref c, ref d);
          
//display values after swap:
 Console.WriteLine("Int values after calling swap:");
 Console.WriteLine("a = {0}, b = {1}", a, b);
 Console.WriteLine("Char values after calling swap:");
 Console.WriteLine("c = {0}, d = {1}", c, d);
          
 Console.ReadKey();
 }
 }
}
<button></button>

زمانی که کد بالا کامپایل و اجرا شود، نتیجه به صورت زیر نمایش داده می‌شود:

1
2
3
4
5
6
7
8
9
Int values before calling swap:
a = 10, b = 20
Char values before calling swap:
c = I, d = V
Int values after calling swap:
a = 20, b = 10
Char values after calling swap:
c = V, d = I
<button></button>

نماینده‌های Generic

می‌توانید به کمک پارامترهای نوع، نماینده‌های Generic را تعریف کنید. برای مثال:

1
2
delegate T NumberChanger< T >(T n);
<button></button>

در مثال زیر کاربرد این نماینده نشان داده شده است:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Collections.Generic;
delegate T NumberChanger< T >(T n);
namespace GenericDelegateAppl {
 class TestDelegate {
 static int num = 10;
       
 public static int AddNum(int p) {
 num += p;
 return num;
 }
 public static int MultNum(int q) {
 num *= q;
 return num;
 }
 public static int getNum() {
 return num;
 }
 static void Main(string[] args) {
//create delegate instances
 NumberChanger< int > nc1 = new NumberChanger< int >(AddNum);
 NumberChanger< int > nc2 = new NumberChanger< int >(MultNum);
          
//calling the methods using the delegate objects
 nc1(25);
 Console.WriteLine("Value of Num: {0}", getNum());
          
 nc2(5);
 Console.WriteLine("Value of Num: {0}", getNum());
 Console.ReadKey();
 }
 }
}
<button></button>

زمانی که کد بالا کامپایل و اجرا شود، نتیجه به صورت زیر نمایش داده می‌شود:

1
2
3
Value of Num: 35
Value of Num: 175
<button></button>

1397/08/26 8019 1268
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...