C# WinForms ve Mono GTK Yazılım ve Sistem Güvenliği

Custom Exception

Try catch ile yaptığımız kontrollerde “catch(Exception exc){Logs.Add(exc);}” sürekli yapıyorsanız işinize yarayacak bir çözüm paylaşacağım.

Exception sınıfından özel bir sınıf türetiyoruz. “catch(MyException)” diyerek her catch içerisinde aynı şeyleri yapıştırmaktan vazgeçebiliyoruz.

Not: Reflection yöntemleriyle bundan çok daha başarılı işler yapılabilir. Ama bir test uygulamasına gereğinden fazla zaman harcamak bana pek uymuyor.

Koda geçiyorum. Daha önce paylaştığım log yazdırma sınıfını çağıracağım.

class Program {
        static void Main(string[] args) {
            try {
                throw new MyException(new Exception("asd"));
            } catch(MyException exc) {
                Console.WriteLine(exc);
            }
            Console.Read();
        }
    }

    public class MyException : Exception {
        public override string Message => base.Message;
        public override IDictionary Data => base.Data;
        public override string Source { get => base.Source; set => base.Source = value; }
        public override string StackTrace => base.StackTrace;
        public override void GetObjectData(SerializationInfo info, StreamingContext context) {
            base.GetObjectData(info, context);
        }
        public override Exception GetBaseException() {
            return base.GetBaseException();
        }
        public MyException() {
            Logs.Add(JsonConvert.SerializeObject(GetBaseException()), LogType.Exception);
        }

        public MyException(Exception ex) {
            Logs.Add(JsonConvert.SerializeObject(ex), LogType.Exception);
        }
    }

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir