Clear        


                
                    using _12_InterfacesVsAbstractClasses._2_AbstractClassOrnegi.Bases;
using System.Text;

namespace _12_InterfacesVsAbstractClasses._2_AbstractClassOrnegi
{
    class MetinselOgrenciDosya : OgrenciDosyaBase // MetinselOgrenciDosya somut (concrete) sınıfı OgrenciDosyaBase soyut (abstract) sınıfından miras alır (inherit eder),
                                                  // MetinselOgrenciDosya bir OgrenciDosyaBase'dir şeklinde de okunabilir
    {
        #region Methodlar
        // OgrenciDosyaBase soyut sınıfından miras aldığımızdan soyut method tanımı üzerinden ezmemiz (override) için method oluşturuldu
        public override string OgrencileriGetir(bool sayiEkle)
        {
            string ogrenciler = ""; // dosyadan okuyacağımız öğrenci bilgilerini atayacağımız ve ilk olarak da içinde hiç bir karakter olmayan string değeri ataması yaptığımız değişken

            if (sayiEkle) // eğer sayiEkle true ise dosyadan okuduğumuz öğrenci bilgilerinin başına artacak şekilde sayı ekleyeceğiz
            {
                string[] ogrenciDizisi = File.ReadAllLines(DosyaYolu, Encoding.UTF8); // önce dizi olarak öğrenci bilgilerini alıyoruz,
                                                                                      // File class'ının ReadAllLines methodu dosya içeriğindeki her bir satır üzerinden string[] döner,
                                                                                      // Encoding.UTF8 parametresi yazılmasa da olur ancak eğer metinsel dosya içeriğinde Türkçe karakterler
                                                                                      // (utf-8 karakter kümesi) varsa karakterlerde sorun yaşanmaması için kullanılması iyi olur

                for (int i = 0; i < ogrenciDizisi.Length; i++) // sonra dizideki her bir öğrenci bilgisini turlayarak öğrenci bilgisi başına birer birer artacak şekilde sayı ekliyoruz
                {
                    ogrenciler += i + 1 + ") " + ogrenciDizisi[i] + "\n";
                }

                ogrenciler = ogrenciler.TrimEnd('\n'); // döngü sonucunda oluşan ogrenciler'deki en son \n (new line) escape character'ini (escape sequence) temizliyoruz
            }
            else // eğer sayiEkle false ise dosyadan okuduğumuz öğrenci bilgilerini ekstra hiç bir işlem yapmadan döneceğiz
            {
                ogrenciler = File.ReadAllText(DosyaYolu, Encoding.UTF8); // File class'ının ReadAllText methodu dosya içeriğini string olarak döner
            }

            return ogrenciler; // öğrenci bilgilerini dönüyoruz
        }



        // OgrenciDosyaBase soyut sınıfından miras aldığımızdan soyut method tanımı üzerinden ezmemiz (override) için method oluşturuldu
        public override void OgrenciEkle(string ogrenci) 
        {
            File.AppendAllText(DosyaYolu, "\n" + ogrenci, Encoding.UTF8); // File class'ının AppentAllText methodu gönderilen string tipindeki veriyi dosyanın sonuna ekler,
                                                                          // eğer WriteAllText methodu kullanılsaydı gönderilen veri mevcut verinin üzerine yazılacaktı (overwrite)
                                                                          // dolayısıyla mevcut veri kaybedilecekti
        }
        #endregion
    }
}