با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش #C در خدمت شما دوستان هستیم . در بخش قبلی با LINQ در زبان #C آشنا شدید ، در این بخش قصد داریم در رابطه با آموزش کار با توابع در #C توضیح دهیم و آنها را خدمت شما معرفی کنیم. تا پایان این جلسه با ما همراه باشید.
در بخش های قبلی آموخته ایم که delegates را می توان به صورت زیر تعریف کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public delegate int SomeOperation(int i, int j); class Program { static int Sum(int x, int y) { return x + y; } static void Main(string[] args) { SomeOperation add = Sum; int result = add(10, 10); Console.WriteLine(result); } } |
خروجی :
1 | 20 |
C # 3.0 شامل نمایه های عمومی (generic delegate) از پیش ساخته شده (built-in) Func و Action است، بنابراین نیازی نیست که delegate سفارشی را مانند مثال بالا تعریف کنید.
Func یک نماینده عمومی است که در فضای نام System موجود است. دارای پارامتر صفر و یا بیشتر و پارامتر ورودی است. آخرین پارامتر به عنوان خروجی (return) استفاده می شود.
برای مثال، یک نماینده Func که دارای یک پارامتر ورودی و یک پارامتر خروجی است را در فضای نام System مانند زیر تعریف می کنیم:
1 2 3 4 | namespace System { public delegate TResult Func<in T, out TResult>(T arg); } |
آخرین پارامتر در محدوده علامت <> به عنوان نوع بازگشت و پارامترهای باقیمانده به عنوان پارامترهای ورودی در نظر گرفته می شوند.
نماینده Func با دو پارامتر ورودی و یک از پارامتر خروجی به صورت زیر نمایش داده می شود.
نماینده Func نعریف شده در زیر همان چیزی است که در بالا ذکر شده . این تابع دو پارامتر ورودی از نوع int را می گیرد و یک مقدار int را برمیگرداند:
1 | Func<int, int, int> sum; |
شما می توانید هر متدی را به نماینده func فوق که دارای دو پارامتر int و یک مقدار خروجی int باشد را اختصاص دهید :
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 | public class Program { static Func<int,int, int> some_operation; public static int Sum(int x, int y) { return x + y; } public static int mines(int x, int y) { return x - y; } public static void Main() { some_operation = Sum; int result1 = some_operation(10, 10); Console.WriteLine(result1); some_operation = mines; int result2 = some_operation(10, 10); Console.WriteLine(result2); } } |
خروجی :
1 2 | 20 0 |
نوع نماینده Func می تواند شامل ۰ تا ۱۶ پارامتر ورودی از انواع مختلف باشد. ولی، باید تنها شامل یک پارامتر برای خروجی باشد. به عنوان مثال، نماینده func زیر هیچ پارامتر ورودی ندارد و تنها شامل یک پارامتر خروجی است.
1 | Func<int> getRandomNumber; |
شما می توانید با استفاده از کلمه کلیدی delegate ، یک متد ناشناس (anonymous method) را به نماینده Func اختصاص دهید:
1 2 3 4 5 | Func<int> getRandomNumber = delegate() { Random rnd = new Random(); return rnd.Next(1, 100); }; |
نماینده Func همچنین می تواند با عبارات lambda مورد استفاده قرار گیرند، همانطور که در زیر نشان داده شده است:
1 2 3 4 5 | Func<int> getRandomNumber = () => new Random().Next(1, 100); //Or Func<int, int, int> Sum = (x, y) => x + y; |
در این بخش با Func و کاربرد آن در زبان #C آشنا شدید ، در بخش بعدی قصد داریم در رابطه با Action Delegate صحبت کرده و آن را شرح دهیم .
ebrahim
با عرض سلام ، من در سی شارپ چگونه می توانم server name های sql server 2019 را در یک کمبو باکس نمایش دهم با تشکر
صادق
سلام. کد زیر نحوه گرفتن server name ها و بعد نمایش اون ها در کنسول رو نشون می ده. می تونید به همه نام ها در یک حلقه foreach دسترسی داشته باشید. حالا به جای چاپ در کنسول، اون ها را به تابع نمایش کمبوباکس پاس بدید.
private void GetDataSources()
{
SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
DataTable table = instance.GetDataSources();
string ServerName = Environment.MachineName;
foreach (DataRow row in table.Rows)
{
Console.WriteLine (ServerName + "\\" + row["InstanceName"].ToString());
}
}