DCSIMG
Watch your object - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Watch your object

כשאנחנו מסתכלים ב watcher על אובייקט כלשהו, אנחנו רואים למעשה את ה ToStfing שלו,

לדוגמא אם האוביקט שלנו נראה כך:

    1     public class Person

    2     {

    3         public int Id { get; set; }

    4         public string Name { get; set; }

    5 

    6         public Person(int id, string name)

    7         {

    8             Id = id;

    9             Name = name;

   10         }

   11     }

ונעמוד עליו ב debug נראה את הדבר הבא:
 
Person1
כמו שאנחנו רואים, בעמודת ה value אנחנו מקבלים את ה ToString ה default של המערכת (שזה שם ה namesapce.class)
 
אם אנחנו רוצים לראות לדוגמה את השם, אפשרות ראשונה זה כמובן לעשות override ל ToString

   16     public class Person

   17     {

   18         public int Id { get; set; }

   19         public string Name { get; set; }

   20 

   21         public Person(int id, string name)

   22         {

   23             Id = id;

   24             Name = name;

   25         }

   26 

   27         public override string ToString()

   28         {

   29             return Name;

   30         }

   31     }

עכשיו נקבל ב debug את הערך שיש ב Name:
 
person2
 
לפעמים אנחנו לא נרצה לעשות override רק עבור המטרה הזאת, או אם נרצה להציג ב debug גם את ה Id, אבל ב ToString נרצה להחזיר רק את ה Name,
 
לכן הגיע ה attribute המיוחד   DebuggerDisplay  שאיתו נוכל להחליט מה בדיוק אנחנו רוצים להציג ב debug.
 

   17     [DebuggerDisplay("Name = {Name}, Id = {Id}")]

   18     public class Person

   19     {

   20         public int Id { get; set; }

   21         public string Name { get; set; }

   22 

   23         public Person(int id, string name)

   24         {

   25             Id = id;

   26             Name = name;

   27         }

   28 

   29         public override string ToString()

   30         {

   31             return Name;

   32         }

   33     }

 
ועכשיו כשנסתכל ב debug נראה את הדבר הבא:
 
Person3
פורסם: Dec 09 2008, 06:50 AM by Shlomo | with 8 comment(s)

תוכן התגובה

Rotem Bloom כתב/ה:

נחמד מאוד תודה

# December 9, 2008 8:50 AM

Maor David-Pur כתב/ה:

שלמה, תודה רבה.

פוסט מעולה.

אגב, כדאי שתשנה את ה Theme של הבלוג מאחר ואתה כותב בעברית. יש תבנית מתאימה לעברית.

מאור

# December 9, 2008 10:59 AM

אוהד אסטון כתב/ה:

Nice feature.

# December 9, 2008 11:06 AM

Doron Ben-David כתב/ה:

למדתי. תודה :)

# December 10, 2008 1:35 AM

עדי כתב/ה:

אחלה פוסט שלמה! תודה.

על הדרך אני ישאל שאלה אם אפשר, האמת זאת שאלה שאני יכול לעשות עליה נסיון ותהייה ולראות אם אני יקבל את התוצאה שאני מחפש , אבל נראה לי שאתה שולט בנושא אז אני ישאל.

בדיוק כמו שאתה שמת את הattribute  

DebuggerDisplay   ניתן לשים את attribute כמו Debug ו Release

מעל פונקציות וככה הקומפיילר יקח את הפונקציה שרלוונטית לאותו build mode.

השאלה שלי אם אני יבנה שני פונקציות עם אותה חתימה אבל כל אחת עם attribute שונה(אחת Debug והשניה Release).

האם זה יעבור קומפילציה?האם זה אפשרי או איזה דרך אחרת לפעיל פונקציות שונות במצבי build שונים?

תודה..

עדי.

# December 10, 2008 8:30 AM

עדי כתב/ה:

תודה שלמה הסתדרתי:)

# December 10, 2008 10:11 AM

Shlomo כתב/ה:

אתה יכול להשתמש ב

#if DEBUG

# December 10, 2008 10:16 AM

שלמה גולדברג כתב/ה:

את הדוגמא ניתן להוריד מכאן : יצא לי בזמן האחרון להסביר כמה פעמים את המושג Attribute - ולכן חשבתי לכתוב

# December 4, 2009 11:09 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 1 and 3 and type the answer here:


Enter the numbers above: