سلام مجدد
چون توضیح سوال قبلی و بعدی زیاد بود بهتر دیدم برای وضوح بیشتر دز پست جدیدی سوال دوم را جواب دهم...
در مورد Delegate ها ... اگه میشه خودتون در مورد این 2 تا توضیح بدید
(((
مطلب زیر را قبلاً در سایت دیگری قرار داده بودم ولی چون دیدن کدها در آن سایت بدون عضویت ممکن نیست، مجدد کپی مطلب خودم را اینجا درج میکنم
)))
delegate ها اشاره گر توابع هستند.
یعنی آدرس شروع کدهای تابع را در RAM در خودش دارد.
در واقع میتوانید با delegate یک تابع را جابه جا کنید.
مثل یک نوع shortcut به محل ان تابع.
کد نمونه:
//C#.Net
public delegate int Name1(int i);
public void Run(Name1 handler)
{
for (int i = 0; i <= 10; ++i)
{
int y = handler(i);
System.Diagnostics.Debug.WriteLine(y);
}
}
public int F1(int i)
{
return i * i;
}
public int F2(int i)
{
return 2 * i;
}
public void Main()
{
this.Run(new Name1(this.F1));
this.Run(this.F1);
this.Run(new Name1(this.F2));
this.Run(this.F2);
}
'VB.Net
Public Delegate Function Name1(ByVal i As Integer) As Integer
Public Sub Run(ByVal handler As Name1)
For i As Integer = 0 To 10
Dim y As Integer = handler(i)
System.Diagnostics.Debug.WriteLine(y)
Next
End Sub
Public Function F1(ByVal i As Integer) As Integer
Return i * i
End Function
Public Function F2(ByVal i As Integer) As Integer
Return 2 * i
End Function
Public Sub Main()
Me.Run(New Name1(AddressOf Me.F1))
Me.Run(AddressOf Me.F1)
Me.Run(New Name1(AddressOf Me.F2))
Me.Run(AddressOf Me.F2)
End Sub
دقت کنید که تابع Run یک اشاره گر تابع میگیرید و آن را در داخل خودش اجرا میکند ...
تابع F1 و F2 هم دو نمونه تابع مطابق الگوی امضای دیجیتال Name1 است که اشاره گرشان میتواند در متغییری از Name1 جا شود و یا منتقل شود.
در واقع در یک متغییر عادی شما ساختارها(struct) و اشیا(class) ها را جابه جا میکنید و در متغییری از نوع delegate میتوانید یک تابع را جا به جا کنید!
بعد از توضیح فوق اگر همچنان مشکلی بود، بفرمایئد.