# Anonim metodlar

*Yuqoridagi* [*Func*](https://docs.dot-net.uz/c-.net/basic/yuqori-daraja/delegatlar/func-delegati)*,* [*Action*](https://docs.dot-net.uz/c-.net/basic/yuqori-daraja/delegatlar/action-delegati) *va* [*Predicate*](https://docs.dot-net.uz/c-.net/basic/yuqori-daraja/delegatlar/predicate-delegati) *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:

![](https://2189654329-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-ML4YbrwilsjU6IyB7jd%2Fsync%2F3c9c28c59e7817b0764a6357bbfdce146e8b53c3.png?generation=1626394831158747\&alt=media)

{% hint style="success" %}
**Anonim metoddan foydalanish uchun quyidagi qadamlarni bajarish yetarli:**

* **Delegat e'lon qilish**
* **Delegatdan obyekt hosil qilish**
* ***delegate*****&#x20;kalit so'zi yordamida hosil qilingan obyektga mos nomsiz metod yozish**
* **delegatdan foydalanish**
  {% endhint %}

Misol:

```csharp
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 metod**lar 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):

```csharp
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:

![](https://2189654329-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-ML4YbrwilsjU6IyB7jd%2Fsync%2F97c40a5b2d92ba1ac5d201b1283c32b3efea0f11.png?generation=1626598107629548\&alt=media)

{% 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:

```csharp
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 metod**larni static holatda e'lon qilishingiz mumkin:

```csharp
Func<int, int, double> degree = static delegate (int a, int b)
    {
        return Math.Pow(a, b);
    };
degree(2, 3);
```

Shuningdek **Anonim metod**lar Event Handler sifatida ham ishlatilishi mumkin:

```csharp
saveButton.Click += delegate(Object o, EventArgs e)
{ 
    //some code for saving
    System.Windows.Forms.MessageBox.Show("Save Successfully!"); 
};
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dot-net.uz/c-.net/basic/yuqori-daraja/delegatlar/anonim-metodlar.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
