27. Generic Methods

בהמשך לשבוע הגנרי הטוב,

נניח שיש לנו פונקציה שמקבלת מערך של אנשים ויוצרת מערך חדש בו הסדר הפוך

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static Person[] Reverse(Person[] array)
{
Person[] result =
new Person[array.Length];
int currentIndex = array.Length - 1;
foreach (Person current in array)
{
result[currentIndex--] = current;
}
return result;
}

כמו בדוגמאות של אתמול, אין פה שום דבר מיוחד במחלקה Person, ויכולנו לכתוב את אותו קוד גם עבור int, object וכו’.

לדוגמה עבור string:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static string[] Reverse(string[] array)
{
string[] result =
new string[array.Length];
int currentIndex = array.Length - 1;
foreach (string current in array)
{
result[currentIndex--] = current;
}
return result;
}

בדומה לGeneric Types יש Feature של Generic Methods.

נוכל לכתוב כך:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static T[] Reverse<T>(T[] array)
{
T[] result =
new T[array.Length];
int currentIndex = array.Length - 1;
foreach (T current in array)
{
result[currentIndex--] = current;
}
return result;
}

שימוש:

1
2
3
4
5
int[] numbers = {4, 8, 15, 16, 23, 42};
int[] reversed = Reverse<int>(numbers);
string[] fruits = {"Apple", "Banana", "Orange", "Mango"};
string[] reversed = Reverse<string>(fruits);

אבל לדבר הזה יש שימושים נוספים.

נניח שאנחנו רוצים לכתוב פונקציה שמקבלת IEnumerable<T> ומחזירה את מספר האיברים בו.

בשביל זה אנחנו צריכים לכאורה ליצור פונקציה שיכול לקבל IEnumerable<T> עבור כל T.

בזכות Generic Methods אפשר!

1
2
3
4
5
6
7
8
9
10
11
public static int Count<T>(IEnumerable<T> enumerable)
{
int count = 0;
foreach (T current in enumerable)
{
count++;
}
return count;
}

קריאה למתודה:

1
2
string[] fruits = { "Apple", "Banana", "Orange", "Mango" };
int count = Count<string>(fruits);

המשך יום גנרי טוב

שתף