OOP
  • OOP Nedir?
  • Class (Sınıf) Nedir?
  • Access Modifiers(Erişim Belirleyiciler) Nedir?
  • Encapsulation (Kapsülleme) Nedir?
  • Constructor (Yapıcı) Metot Nedir?
  • Inheritance (Kalıtım) Nedir?
  • Abstract Nedir?
  • İnterface(Arayüz) Nedir?
  • İnterface ve Abstract benzerlikleri veya farkları nelerdir?
  • Custom Exception
  • Static Nedir?
  • Polimorphism(Çok Biçimlilik) Nedir?
  • List Nedir?
  • Enum Nedir?
Powered by GitBook
On this page

Was this helpful?

Custom Exception

istisnai durumları ele almak anlamına gelir.Geliştirdiğimiz uygulamalarda geliştirici(developer)kaynaklı logic(mantıksal),beklenmedik ve kullanıcı bazlı hataları handle(ele almak) etmemiz gerekmektedir bu senaryolardan hangisi olursa olsun bunları try-catch blokları ile ele alıyoruz ve ikinci silahımız break pointtir.

Custom bir exception sınıfı olusturmak istediğimizde bu sınıf muhakkak "ApplicationExceptin.cs"sınıfından kalıtım almalıdır.

public class HasNumber:ApplicationException //artık HasNumber.cs sınıfımız c# da hiyerarşik yani gömülü olarak bulunan ApplicationException.cs

//sınıfından sahip olduğu tüm özellik ve yetenekleri kazanmıştır.

HasNumber.cs

public class HasNumber:ApplicationException 
    {
        public string Text { get; set; }
        public HasNumber(string param)
        {
            Text = param;//dışarıdan gelen param ı text e attık
            GetException();
        
           
        }
        public override string Message { get { return "Metin içerisinde sayısal değer yer almaz:"; } }
        
    public void GetException() 
        {
            //bir dosya veya veritabanına alınan hatalar ile ilgili bildirimleri bu method aracılığı ile yazdırabilirsiniz.Biz
            //database ile connection kurmayı bilmediğimiz için text dosyasına yazdıracağız.Burada dosyadan okuma yazma işlemlerinin yanı
            //sıra StringBuilder yapısınıda öğreneceğiz.(stringbuilder a ayrı şekilde bakacağım)

            string folderUrl1 = Application.StartupPath + "\\memos.txt"; //burada projenın bulundugu dizin altında "memos.txt" dosyasını yaratmak için Application.cs sınıfın StartupPath özelliğini kullandık
            //bu kod bizim için ilgili .txt uzantılı dosyayı bir kez yaratacak ve hata alındıkça üzerine yazılacak unutmayın 1 kez yaratacak.
            DateTime exceptionTime = DateTime.Now;
            string message = this.Message;
            string text = this.Text;

            StreamWriter streamWriter = new StreamWriter(folderUrl1, true ,Encoding.UTF8);
            //yazma işlemini tam olarak burası yapacak
            //Lakin "StreamWriter" sadece StringBuilder nesnesi üzerinden değer kabul ettiği için ve bizim yukarıda hazırladığımız değişkenleri
            //(exceptionTime,message,text) bir araya getirecek tek bir string hata mesajı olarak yazdıracagız.Bu bir araya getirme 
            //işlemi için Strng Format çeşitlerindende yararlanabilirdik lakin daha sonradan StringWriter kabul ettiği StringBuilder 
            //yapısına dönüştürmek zorunda kalacaktır hem bu sıkı tının yanında hemde StringBuilder ın String Format tan daha performanslı olduğunu
            //biliyoruz.            

            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append(text);
            stringBuilder.Append("|");
            stringBuilder.Append(message);
            stringBuilder.Append("|");
            stringBuilder.Append(exceptionTime);
            stringBuilder.Append("|");
            streamWriter.WriteLine(stringBuilder.ToString());
            streamWriter.Close();

        }
    }
}
     

Form1;

//aşağıda methoda yüklediğimiz görev,,string tipindeki"text" parametresine dışarıdan gelen değeri alıp,bu değer içerisinde
//karakter karakter dolaşmak,dolaşırkende bir sayısal ifadeye denk geldiğinde bizim hazırladığımız custom exception sınıfın
//olan "HasNumber.cs" fırlatmaktır
    public void Check(string text)
    {
        foreach (char character in text)
        {
        if (char.IsDigit(character)) //şart cümleciğinde bu adıma gelen o anki karakterin digit ise devreye girecek bir 
            //mekanizma koyduk ***sayı varsa yani hata varsa hasnumber a fırlat**
        {
            throw new HasNumber(text);//Bizim custom olarak oluşturduğumuz exception u hata aldığımızda throw ettik.
            }

        }
    }
    public void WriteExceptionToListView()
    {
//Bizim bu uygulamada önceden aldığımız exceptionlar "memos.txt" dosyasında tutulmakadır. bu bağlamda ilk yapmam gereken
//iş "memos.txt" dosyası içerisinde logları okumakdır 
StreamReader streamReader = new StreamReader(Application.StartupPath + "\\memos.txt");
            
 string[] exceptions = streamReader.ReadToEnd().Split(new string[] { "\n" },StringSplitOptions.RemoveEmptyEntries );//burada "memos.txt"
//dosyamızdaki bütün olan herşeyi satır satır okuduk ve string tipindeki "exceptions" dizisine bunları satır satır attık. unutmayın HasNumber sınıfında
//StringBuilder ile olusturdugumuz satırlar(text | message |exceptionTime) bu sekılde loglanacaktı artık bu bütün bir satır
//"exceptions" dizisinin içerisinde
          
      streamReader.Close();

            foreach (string satir in exceptions)
            {
                string[] degerler = satir.Split('|');
                ListViewItem listViewItem = new ListViewItem();
                listViewItem.Text = degerler[0];
                listViewItem.SubItems.Add(degerler[1]);
                listViewItem.SubItems.Add(degerler[2]);
                listView1.Items.Add(listViewItem);
                
            }
            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
              
        
        }
        private void btnsubmit_Click(object sender, EventArgs e)
        {
            try
            {
                Check(txtverigiris.Text);
            }
            catch (Exception ex)
            {
                errorProvider1.SetError(txtverigiris, ex.Message);//forma errorprovider attım
                WriteExceptionToListView();

                
            }
        }
Previousİnterface ve Abstract benzerlikleri veya farkları nelerdir?NextStatic Nedir?

Last updated 4 years ago

Was this helpful?