PDA

View Full Version : ساخت لیستی از توابع



quantomquery
چهارشنبه 05 آذر 1393, 17:22 عصر
سلام

من قراره چند تا تابع داشته باشم که ورودی های مختلف و بازگشتی هایی از نوع مختلف داشته باشند.
بعد قراره یکسری اطلاعات رو به این توابع به عنوان ورودی بدم.
یعنی به صورت داینامیک ممکنه اطلاعات من روی همه توابع اجرا بشه یا اینکه روی برخی از توابع اجرا بشه.

حالا می خوام یه لیست جنریک از توابع داشته باشم که با یک for ،اطلاعات رو به توابع بفرستم و جواب بگیرم.
مثلا بیام یک تابع رو به لیست توابع خودم add کنم یا اینکه بعد remove کنم.

چطور این کار رو انجام بدم؟


البته من اومدم به ازای هر تابع یه کلاس ساختم که بزارم تو یه لیست. اما نمونه های این کلاس ها که همنوع نیستن تو یه لیست بزارم.
آبجکت هم نمیشه بگیرم چون اونور cast کردن ، گیرم می شه.

چه کنم ؟

ممنون

دلتنگ اسمان
چهارشنبه 05 آذر 1393, 20:43 عصر
سلام
فکر میکنم اگه برای این کار از Delegate استفاده کنی بهتر جواب میگیری. یعنی توی Delegate میتونی توابع رو به راحتی با عملگر + اضافه کنی و با عملگر - توابع رو از لیست حذف کنی.
آموزش Delegate هم اگه سرچ کنی زیاد گیرت میاد

rahnema1
پنج شنبه 06 آذر 1393, 08:02 صبح
سلام،آرایه ای از delegate های مختلف هم می شه تشکیل داد

string intTostring(int v) {
return v.ToString();
}
string doubleTostring(double v) {
return v.ToString();
}
int intPow2 ( int x) {
return x * x;
}

delegate string string_out_delegate<T>(T val);
delegate string int_in_string_out_delegate(int val);
delegate int int_out_delegate<T>(T val);

void Button1Click(object sender, EventArgs e)
{
Delegate[] delarray = {
new string_out_delegate<int>(intTostring),
new int_in_string_out_delegate(intTostring),
new string_out_delegate<double>(doubleTostring),
new int_out_delegate<int>(intPow2)
};
object[] input = {2, 4, 7.609875, 8};
object[] output = new object[delarray.Length];
for (int i = 0; i < delarray.Length; i++) {
output[i] = delarray[i].DynamicInvoke(input[i]);
}
foreach (var element in output) {
MessageBox.Show(string.Format("{0}", element));
}
}

مهرداد صفا
پنج شنبه 06 آذر 1393, 08:54 صبح
با سلام.
در این تاپیک (http://barnamenevis.org/showthread.php?446954-%D9%88%D8%B1%D9%88%D8%AF-%D8%AA%D8%A7%D8%A8%D8%B9-%D8%B1%DB%8C%D8%A7%D8%B6%DB%8C-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1) نمونه چنین کاری رو میبینید. اگر سوالی بود و یا نیاز به توضیحات داشتید بفرمایید.