Clear        


                
                    namespace _12_InterfacesVsAbstractClasses._1_InterfaceOrnegi.Bases
{
    interface IOgrenciDosya // bu interface'i implemente edecek somut (concrete) sınıflar için ortak özellik ve method tanımlarını içeren soyut (abstract) interface
    {
        #region Özellik Tanımları
        string DosyaYolu { get; set; } // Dosyanın diskteki fiziksel yolu (absolute path) özellik tanımı.
        // *1 Özellikleri bu interface'i implemente eden tüm sınıflarda oluşturmak zorunda olduğumuzdan abstract bir base class oluşturup bu özelliği
        // içerisinde tanımlayarak kalıtım yoluyla alt sınıflara taşımak daha uygun olacaktır (Bakınız: 2_AbstractClassOrnegi -> Bases -> OgrenciDosyaBase -> *1).
        #endregion



        #region Method Tanımları
        string OgrencileriGetir(bool sayiEkle); // dosyadaki öğrencileri sayiEkle parametresine göre string olarak dönen method tanımı

        void OgrenciEkle(string ogrenci); // string olarak gönderilen öğrenci parametresini dosya sonuna ekleyen (append) method tanımı

        string DosyaAdiGetir(); // DosyaYolu özelliği üzerinden dosya adını dönen method tanımı.
        // *2 Bu method bu interface'i implemente eden tüm sınıflarda aynı şekilde implemente edileceğinden abstract bir base class oluşturup bu methodu
        // içerisinde implemente ederek kalıtım yoluyla alt sınıflara taşımak daha uygun olacaktır (Bakınız: 2_AbstractClassOrnegi -> Bases -> OgrenciDosyaBase -> *2). 

        string DosyaUzantisiGetir(); // DosyaYolu özelliği üzerinden dosya uzantısını dönen method tanımı.
        // *3 Bu method bu interface'i implemente eden tüm sınıflarda aynı şekilde implemente edileceğinden abstract bir base class oluşturup bu methodu
        // içerisinde implemente ederek kalıtım yoluyla alt sınıflara taşımak daha uygun olacaktır (Bakınız: 2_AbstractClassOrnegi -> Bases -> OgrenciDosyaBase -> *3). 
        #endregion
    }
}