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();

                
            }
        }

Last updated