Debug işlemleri yaparken sıklıkla karşılşatığımızın durumların başında nesnemiz başka bir nesneyi içeriyorsa bu nesneyi ancak hiyeraşik bir biçimde inceleme şansına sahip oluyoruz. Aşağıdaki resimde daha net birşekilde ne demek istediğim belli oluyor.

Görüldüğü gibi Report nesnemiz içerde List<int> türünden Results özelliğine (property) sahip. Bu özelliğin hangi değerlerini tuttuğunu görmek için + ile detayına inip bakmamız gerekiyor. Bu özellik baska bir nesneyi temsil ediyor, ve o nesne de içerisinde iç içe (nested ) başka değerleri tutuyor olabilir. Bu durumda + lar ile detaylara inip boğulabilirsiniz ;-) Ama çoğumuz bu iç içe nesnelerin aslında sadece işimize yarayacak kısmını debug işlemi sırasında görmek isteyebilir, hatta bu kısımları özelleştirerek istediğimiz gibi bir görüntü sağlayabiliriz. Aşağıdaki resim ile bir önceki resimi kıyaslayarak debug işlemi sırasındaki görüntüleri karşılaştırabilirsiniz.

Bu görüntünün sağlabilmesi için yapmamız gereken Report nesnemizin debug işlemi sırasında görünmesini isteyeceğimiz şekilde bir proxy class'ını hazırlamak.

[DebuggerTypeProxy(typeof(ReportDebuggerProxy))]
    public class Report
    {
        private DateTime _date;
        public DateTime ReportDate
        {
            get { return _date; }
            set { _date = value; }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private List<int> _results = new List<int>();
        public List<int> Results
        {
            get { return _results; }
            set { _results = value; }
        }

        private int _dummy;
        public int Dummy
        {
            get { return _dummy; }
            set { _dummy = value; }
        }

    }

Report nesnemize DebuggerTypeProxy attribute'nün uygulandığı dikkatinizi çekmiştir. Bu atrribute sayesinde Report nesensi debug işlemi sırasında sanki Report türünden bir nesne değil de ReportDebuggerProxy nesnesinin bir görüntüsüymüş gibi karşımıza çıkacaktır. Şimdi proxy görevini görecek sınıfımızı yazalım.

public class ReportDebuggerProxy
    {
        Report _report;
        public ReportDebuggerProxy(Report report)
        {
            _report = report;
        }

        public string ReportDate
        {
            get { return _report.ReportDate.ToLongDateString();}
        }
        public string Name
        {
            get { return "Raport Name : " + _report.Name; }
        }

        public string Results
        {
            get
            {
                StringBuilder sb = new StringBuilder();
                foreach (int result in _report.Results)
                {
                    sb.Append("(");
                    sb.Append(result.ToString());
                    sb.Append(") ");
                }
                return sb.ToString();
            }
        }
    }

Görüldüğü gibi debug sırasında görmek istediğimiz özellikleri belirtiyoruz. Proxy sınıfında dikkat ederseniz Report sınıfındaki Dummy özelliğine yer verilmemiş ve diğer özellikler ise görülmek istendiği şekilde özelleştirilmiş.

 


 
Sunday, November 01, 2009 3:11:56 AM (GTB Standard Time, UTC+02:00)
Thanks for article. Everytime like to read you.
Thursday, November 26, 2009 7:35:02 AM (GTB Standard Time, UTC+02:00)

<a href="http://www.gouggs.com/">Ugg Australia</a> Brand by the American company Deckers is a popular maker of Ugg Boots and fashion footwear. As we specialize in Australian made <a href="http://www.gouggs.com/">Ugg Boots</a> we do not sell Ugg Australia brand boots on this site but due to popular demand we can offer Ugg Australia Brand at our affiliated site: www.e-uggs.com;UGG New Style Boots are made from the <a href="http://www.gouggs.com/">highest quality plush twin-faced sheepskin</a>with craftsmanship you expect from UGG Australia.100% premium
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Live Comment Preview