Sobes.tech
Junior

C# da interfeyslarni qaysi hollarda va qaysi maqsadlarda ishlatamiz?

sobes.tech AI

AIdan javob

C# da interfeyslar quyidagi maqsadlarga erishish uchun ishlatiladi:

  1. Shartnoma ta'rifi: Interfeys, bu interfeysni amalga oshiradigan sinf yoki tuzilma bajarishi kerak bo'lgan a'zolar (usullar, xususiyatlar, voqealar, indeksatorlar) to'plamini belgilaydi. Bu turli turlarning xulq-atvorida izchillikni ta'minlaydi.

    // Interfeys ta'rifi
    public interface IDrawable
    {
        void Draw();
        int LineThickness { get; set; }
    }
    
    // Interfeysni amalga oshiradigan sinf
    public class Circle : IDrawable
    {
        public int LineThickness { get; set; }
    
        public void Draw()
        {
            // Doira chizish logikasi
        }
    }
    
  2. Polimorfizm: Interfeyslar yordamida turli turlar ob'ektlari bilan umumiy interfeys turi orqali ishlash mumkin. Bu, interfeysni amalga oshiradigan har qanday ob'ektga murojaat qilish bu interfeys turiga o'tkazilishi mumkinligini anglatadi.

    // IDrawable bilan ishlovchi har qanday ob'ekt uchun metod
    public void Render(IDrawable item)
    {
        item.Draw(); // Draw metodining aniq implementatsiyasi chaqiriladi
    }
    
    // Foydalanish:
    IDrawable circle = new Circle();
    Render(circle); // Circle sinfidagi Draw() chaqiriladi
    
  3. Ko'p meros olish: C# sinflar ko'p meros olishni qo'llab-quvvatlamaydi, ammo sinf yoki tuzilma bir nechta interfeyslarni amalga oshirishi mumkin. Bu turga turli "shartnomalar" ichida belgilangan xulq-atvorlarni berish imkonini beradi.

    public interface ISaveable
    {
        void Save();
    }
    
    public interface ILoadable
    {
        void Load();
    }
    
    // Bir nechta interfeyslarni amalga oshiradigan sinf
    public class ConfigurationManager : ISaveable, ILoadable
    {
        public void Save()
        {
            // Saqlash logikasi
        }
    
        public void Load()
        {
            // Yuklash logikasi
        }
    }
    
  4. Kuchsiz bog'lanish (Decoupling): Interfeyslar yordamida komponentlar o'rtasidagi bog'liqlikni kamaytirish mumkin. Aniq sinfga bog'liq bo'lish o'rniga, komponent interfeysga bog'liq bo'lishi mumkin. Bu, amalga oshirishlarni o'zgartirish va test qilishni osonlashtiradi.

    public interface ILogger
    {
        void LogMessage(string message);
    }
    
    public class FileLogger : ILogger
    {
        public void LogMessage(string message)
        {
            // Faylga yozish logikasi
        }
    }
    
    public class DatabaseLogger : ILogger
    {
        public void LogMessage(string message)
        {
            // Ma'lumotlar bazasiga yozish logikasi
        }
    }
    
    public class ProcessingEngine
    {
        private readonly ILogger _logger;
    
        // Interfeysga bog'liqlik, aniq amalga oshirishga emas
        public ProcessingEngine(ILogger logger)
        {
            _logger = logger;
        }
    
        public void ProcessData()
        {
            // ...
            _logger.LogMessage("Ma'lumotlar qayta ishlandi.");
        }
    }
    
  5. Kengaytirish imkoniyati: Interfeyslar mavjud xulq-atvorlarning yangi amalga oshirishlarini qo'shishni osonlashtiradi, bu esa bu interfeysni ishlatadigan kodni o'zgartirmasdan amalga oshiriladi.

  6. Hujjatlash va o'z-o'zini hujjatlashtirish: Yaxshi nomlangan interfeys va uning a'zolariga izohlar, bu interfeysni amalga oshiradigan ob'ektlardan qanday xulq-atvor kutilishini tavsiflovchi hujjat shakli sifatida xizmat qiladi.