description |
---|
Nodirbek Abdulaxadov |
Yuqoridagi Func, Action va Predicate _mavzularida ushbu delegatlarning anonim metod bilan qo'llanishini ko'rdik, lekin anonim metod qanday ekanligi haqida endi gaplashamiz._😊
Nomidan ko'rinib turibdiki, Anonim metod - bu ismsiz metod. U metod bo'lsa, delegatlar mavzusida nima qilyapti degan savol tug'ilishi mumkin. Buning sababi shundaki, Anonim metod delegat tushunchasi bilan chambarchas bog'liq va delegatlarni chaqirish uchun ishlatiladi.
{% hint style="info" %} Qisqacha qilib aytganda metodlarni nima deb nomlashni bilmasdan nom qidirgan paytingizda: "keling endi shu metodni benom qoldiramiz" deb yordamga keladi. {% endhint %}
Anonim metod umumiy ko'rinishi:
{% hint style="success" %} Anonim metoddan foydalanish uchun quyidagi qadamlarni bajarish yetarli:
- Delegat e'lon qilish
- Delegatdan obyekt hosil qilish
- delegate** kalit so'zi yordamida hosil qilingan obyektga mos nomsiz metod yozish**
- delegatdan foydalanish {% endhint %}
Misol:
using System;
namespace Delegates
{
class Program
{
//delegat e'lon qilish
public delegate void Print(string s);
static void Main(string[] args)
{
//delegatdan obyekt hosil qilib unga anonim metod tayinlash
Print print;
print = delegate (string str)
{
Console.WriteLine($"Hello {str}");
};
//delegatni chaqirish
print("DOT-NET.UZ");
Console.ReadKey();
}
}
}
//Chiquvchi:
// Hello DOT-NET.UZ
Anonim metodlar ichida global o'zgaruvchilardan ham foydalanish mumkin. Quyidagi misolda biror sonning ko'rsatilgan darajasini hisoblovchi dastur ko'rsatilgan(anonim metod ichida 'a' global holatda, 'n' esa 'N' nomi bilan parametr sifatida ishlatilgan):
using System;
namespace Delegates
{
class Program
{
//delegat e'lon qilish
public delegate int Degree(int i);
static void Main(string[] args)
{
//o'zgaruvchilarni kiritish
Console.Write("Son kiriting: ");
int a = int.Parse(Console.ReadLine());
Console.Write("Darajani kiriting: ");
int n = int.Parse(Console.ReadLine());
//delegatdan obyekt hosil qilib unga anonim metod tayinlash
Degree d = delegate (int N)
{
return (int)Math.Pow(a, N);
};
//delegatni chaqirish
Console.WriteLine($"\n{a} sonining {n}-darajasi: {d(n)}");
Console.ReadKey();
}
}
}
Natija:
{% hint style="danger" %} Anonim metod cheklovlari:
- Anonim metod goto, break va continue o'tish operatorlarini o'z ichiga olmaydi
- Anonim metod out va ref parametrlarini ishlata olmaydi
- Anonim metod operatorning chap tomonida ishlatilmaydi {% endhint %}
delegate operatoridan foydalanishda parametrlarni tashlab ketish ham mumkin. Bunday holatda siz ixtiyoriy parametrlarni yuborish imkoniyatiga ega bo'lasiz:
Action SayHello = delegate { Console.WriteLine("Hello!"); };
SayHello();
Action<int, double, bool, string> introduce = delegate { Console.WriteLine("This method can be called with any parameters!"); };
introduce(42, 2.7, 2>4, "Hello");
C# 9.0 dan boshlab siz Anonim metodlarni static holatda e'lon qilishingiz mumkin:
Func<int, int, double> degree = static delegate (int a, int b)
{
return Math.Pow(a, b);
};
degree(2, 3);
Shuningdek Anonim metodlar Event Handler sifatida ham ishlatilishi mumkin:
saveButton.Click += delegate(Object o, EventArgs e)
{
//some code for saving
System.Windows.Forms.MessageBox.Show("Save Successfully!");
};