Sobes.tech
Junior

C#-də interfeysləri hansı hallarda və hansı məqsədlər üçün istifadə edirik?

sobes.tech Süni İntellekt

AI-dan cavab

C#-də interfeyslər aşağıdakı məqsədlər üçün istifadə olunur:

  1. Müqavilənin müəyyənləşdirilməsi: Interfeys, bu interfeysi həyata keçirən sinif və ya strukturun yerinə yetirməli olduğu üzvlər (metodlar, xüsusiyyətlər, hadisələr, indeksatorlar) toplusunu müəyyən edir. Bu, müxtəlif tiplər arasında davranışda vahidliyi təmin edir.

    // Interfeysin müəyyənləşdirilməsi
    public interface IDrawable
    {
        void Draw();
        int LineThickness { get; set; }
    }
    
    // Interfeysi həyata keçirən sinif
    public class Circle : IDrawable
    {
        public int LineThickness { get; set; }
    
        public void Draw()
        {
            // Dairənin çəkilməsi loqikası
        }
    }
    
  2. Polimorfizm: Interfeyslərdən istifadə müxtəlif tiplərdə obyektlərlə ümumi interfeys tipi vasitəsilə işləməyə imkan verir. Bu, interfeysi həyata keçirən obyektə istinadın həmin interfeys tipinə çevrilə bilməsi ilə əldə edilir.

    // IDrawable interfeysini həyata keçirən hər hansı obyektlə işləyən metod
    public void Render(IDrawable item)
    {
        item.Draw(); // Konkret Draw metodunun həyata keçirilməsi çağırılır
    }
    
    // İstifadə:
    IDrawable circle = new Circle();
    Render(circle); // Circle sinifindən Draw() metodunun həyata keçirilməsi çağırılacaq
    
  3. Çoxlu irsiyyət (Multiple Inheritance): C# çoxlu irsiyyətə dəstək vermir, lakin sinif və ya struktur bir neçə interfeysi həyata keçirə bilər. Bu, tiplərə müxtəlif "müqavilələr"də müəyyən edilmiş davranışları əlavə etməyə imkan verir.

    public interface ISaveable
    {
        void Save();
    }
    
    public interface ILoadable
    {
        void Load();
    }
    
    // Bir neçə interfeysi həyata keçirən sinif
    public class ConfigurationManager : ISaveable, ILoadable
    {
        public void Save()
        {
            // Yadda saxlamanın loqikası
        }
    
        public void Load()
        {
            // Yükləmənin loqikası
        }
    }
    
  4. Zəif əlaqəlilik (Decoupling): Interfeyslərdən istifadə komponentlər arasında asılılığı azaldır. Konkret sinfə deyil, interfeysə əsaslanaraq işləmək asanlaşır və bu, dəyişiklik və test üçün əlverişlidir.

    public interface ILogger
    {
        void LogMessage(string message);
    }
    
    public class FileLogger : ILogger
    {
        public void LogMessage(string message)
        {
            // Fayla yazma loqikası
        }
    }
    
    public class DatabaseLogger : ILogger
    {
        public void LogMessage(string message)
        {
            // Verilənlər bazasına yazma loqikası
        }
    }
    
    public class ProcessingEngine
    {
        private readonly ILogger _logger;
    
        // Interfeysə, konkret həyata keçirməyə deyil, asılılıq
        public ProcessingEngine(ILogger logger)
        {
            _logger = logger;
        }
    
        public void ProcessData()
        {
            // ...
            _logger.LogMessage("Məlumatlar işlənib.");
        }
    }
    
  5. Genişləndirmə: Interfeyslər mövcud davranışlara yeni həyata keçirmələr əlavə etməyi asanlaşdırır, bu da interfeysi istifadə edən kodu dəyişdirmədən yeni funksionallıq əlavə etməyə imkan verir.

  6. Sənədləşdirmə və öz-özünü sənədləşdirmə: Yaxşı adlandırılmış interfeys və onun üzvlərinə dair şərhlər, bu interfeysi həyata keçirən obyektlərdən gözlənilən davranışı təsvir edən sənədləşdirmə formasına xidmət edir.