توی این مثال، ما کلاسی به اسم User داریم و یک آرایه ازین کلاس داریم.حالا ما متدی داریم که قرار آرایه رو بگیره و مرتب کنه (f2).این متد برای برای مرتب کردن آرایه، نیاز به مقایسه User ها داره.واسه همین یک delegate میگیره تا اون، کار مقایسه رو براش انجام بده:
public class User
{
public User(string Name, int Age)
{
this.Name = Name;
this.Age = Age;
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
public delegate int UserComparer(User user1, User user2);
public void SortUsers(User[] users, UserComparer comparerMethod)
{
long right_border = users.Length - 1;
long last_exchange = 0;
do
{
last_exchange = 0;
for (long i = 0; i < right_border; i++)
{
if (comparerMethod(users[i], users[i + 1]) > 0)
{
User temp = users[i];
users[i] = users[i + 1];
users[i + 1] = temp;
last_exchange = i;
}
}
right_border = last_exchange;
}
while (right_border > 0);
}
public int UserComparerMethod(User user1, User user2)
{
return user1.Name.CompareTo(user2.Name);
}
private void Form1_Load(object sender, EventArgs e)
{
User[] users = new User[3]
{
new User("Betty", 23),
new User("Susan", 20),
new User("Lisa", 25)
};
SortUsers(users, UserComparerMethod);
}
متدی که ما بهش برای مقایسه میدیم، دو تا User میگیره و اونها رو بر اساس نام مقایسه میکنه.در این حالت، متد Sort در مورد نحوه مقایسه نیاز نیست چیزی بدونه و نحوه مقایسه بستگی به delegate ی داره که ما بهش میدیم. ممکنه یکجا بخوایم بر اساس سن مرتب کنیم. میتونیم یک method در قالب delegate تعریف شده بهش بدیم که بجای نام از سن برای مقایسه استفاده کنه..
پ.ن : البته در #C برای مقایسه یک آرایه از هر نوع، روش بهتری هست من فقط برای مثال delegate این کد رو نوشتم...