Clear        


                
                    namespace _12_InterfacesVsAbstractClasses._2_AbstractClassOrnegi.Bases
{
    abstract class OgrenciDosyaBase
    {
        #region Özellikler
        public string DosyaYolu { get; set; } // Dosyanın diskteki fiziksel yolu (absolute path) özellik tanımı.
        // *1 Kendisinden miras alan her sınıfta dosya yoluna ihtiyaç olacağından özelliği burada oluşturup alt sınıflara taşıyoruz.
        #endregion



        #region Methodlar
        /// <summary>
        /// Metin dosyası içeriğini sayiEkle parametresine göre string olarak dönen method tanımı.
        /// </summary>
        /// <param name="sayiEkle"></param>
        /// <returns>string</returns>
        public abstract string OgrencileriGetir(bool sayiEkle); // Dosyadaki öğrencileri sayiEkle parametresine göre string olarak dönen method tanımı.
        // Kendisinden miras alan her sınıfta farklı yöntemler üzerinden dosya okunacağından abstract (soyut) olarak tanımlıyoruz.
        // Bu şekilde interface'teki kullanıma benziyor.



        /// <summary>
        /// String olarak gönderilen ogrenci parametresini dosya sonuna ekleyen (append) method tanımı.
        /// </summary>
        /// <param name="ogrenci"></param>
        public abstract void OgrenciEkle(string ogrenci); // String olarak gönderilen öğrenci parametresini dosya sonuna ekleyen (append) method tanımı.
        // Kendisinden miras alan her sınıfta farklı yöntemler üzerinden dosyaya yazılacağından abstract (soyut) olarak tanımlıyoruz.
        // Bu şekilde interface'teki kullanıma benziyor.



        /// <summary>
        /// DosyaYolu özelliği üzerinden dosya adını dönen method.
        /// </summary>
        /// <returns>string</returns>
        public string DosyaAdiGetir() 
        // *2 Kendisinden miras alan her sınıfta aynı yöntemle dosya adı dönüleceğinden methodu burada implemente edip alt sınıflara taşıyoruz.
        {
            string dosya = Path.GetFileName(DosyaYolu); // Path sınıfının GetFileName methodu dosya adı ile birlikte uzantısını döner, örneğin Öğrenciler.txt

            return dosya.Split('.')[0]; // sadece dosya adını dönebilmek için . karakterine göre dosya'yı parçalayıp elde ettiğimiz dizideki ilk elemanı dönüyoruz, örneğin Öğrenciler
        }



        /// <summary>
        /// DosyaYolu özelliği üzerinden dosya uzantısını dönen method.
        /// </summary>
        /// <returns>string</returns>
        public string DosyaUzantisiGetir()
        // *3 Kendisinden miras alan her sınıfta aynı yöntemle dosya uzantısı dönüleceğinden methodu burada implemente edip alt sınıflara taşıyoruz.
        {
            string dosya = Path.GetExtension(DosyaYolu); // Path sınıfının GetExtension methodu dosya uzantısını döner, örneğin .txt

            return dosya.Substring(1).ToLower(); // sadece dosya uzantısını dönebilmek için dosya üzerinden 1. index'ten başlayıp sona kadar sub string alıyoruz
                                                 // ve tüm karakterleri küçük harfe dönüştürüyoruz, örneğin txt
        }
        #endregion
    }
}