Browse by Tags

All Tags » קוד נכון (RSS)
Disposable Property
עדי הראה לי רעיון מאוד מעניין למימוש שמירת אובייקט זמני בזיכרון. למה הכוונה ? נניח שיש לנו קוד כזה public class FileLogger : ILogger { } public class MockLogger : ILogger { } public class Person { public ILogger Logger { get ; set ; } } ויש לנו את פונקצייה שמקבלת כפרמטר Person אבל בחלק מהקוד של הפונקצייה לא רוצים שה - Logger יהיה FileLogger אלא MokeLogger - מן הסתם נעשה קוד כזה public void Func( Person person) { ILogger original = person.Logger; person.Logger = new MockLogger (); //work..... person...
עבודה עם Services ו - Console Application
הרבה פעמים כשאנחנו עובדים עם Services ה - host שלהם הוא Windows Service, מה שמתסכל לעבוד בצורה הזאת זה שבזמן פיתוח כדי לדבג צריך כל פעם לעשות Attach to process ובכל קומפילציה צריך לעצור את ה - Serivce ולהפעיל אותו מחדש אחרי הקופמילציה (מה שלוקח קצת זמן). אני משתמש ברעיון מעניין (נדמה לי שזה שייך לאלכס מחברת QualiSystems ) נוסיף למחלקה שיורשת מ - ServiceBase את המתודת הבאות public void Open() { OnStart( null ); } public void Close() { OnStop(); } כעת ב - Main נכתוב את הקוד הבא bool console = args...
Session Manager
אחד מהדברים שאני לא אוהב בעבודה עם Session זה העובדה שאחנו עובדים איתו עם מחרוזות. בפרוייקטים בינוניים פתאום מתחילים לשכוח עם איזה שם השתמשנו והאם השתמשנו בשם מסויים, והעניינים מתחילים להסתבך. ידיד יקר שי קרן כתב class בשם SessionManager שפותר את הבעיות האלו, מכיוון שהשימוש ב - Session הוא בעזרת enum. אפשר להוריד את הקוד מכאן (אני משתמש בו כבר שנתיים בכל הפרוייקטים שלי) זה עובד בצורה הבאה. (אני מציג כאן רק חלק מהקוד - הקוד המלא ניתן להורדה מהלינק למעלה) יש enum עם כל השמות שנרצה להשתמש ב - Session...
קדימות של אופרטור + על פני אופרטור ==
לפעמים כשמדבגים מאוד נוח להכניס מחרוזות ל - trace/console. בקיצר כתבתי את הקוד הבא: Console .WriteLine( "myObj == null " + myObj == null ); להפתעתי זה הדפיס רק את הערך false ללא המחרוזת: myObj == null. (גם כשהערך היה אמור להחזיר את התוצאה true) לאחר קצת מחשבה נזכרתי שהאופרטור + הוא לפני אופרטור ההשוואה - כלומר - מה שקרה זה הדבר הבא: חיבור של המחרוזת myObj == null למשתנה myObj ואת התוצאה השוונו ל - null, מה שתמיד החזיר את הערך false. כמובן שאחרי ההבנה הקוד שנכתב היה - Console .WriteLine...
הודעות שגיאה אנושיות - בבקשה
לפעמים יש תוכנות שהייתי רוצה להכיר את המתכנתים שלהם. יש לנו סורק (שמאפשר לסרוק מקוד). הנחנו את הדף לא לגמרי במקום המתאים, והנה הודעת השגיאה שקבלנו: מבינים, לא שמתי את הדף בדיוק במקום ולא רק שאני לא מקבל פירוט על השגיאה, אני מקבל הודעה שמשהו קטסטרופלי קרה. אז, כשאתם מפתחים תנסו לתפוס את השגיאות ולתת הודעות אנושיות.
The Difference Between Equals and Static Equal
כשהראתי לסטודנטים שאני מלמד את הפוסט של ספיריטוס שמדבר על ההבדלים בין Equal ל - ==, שאלו אותי - מה ההבדל בין ה - Equal שיורשים מ - object לבין ה - Equal הסטטי ? במחשבה ראשונה עניתי - שלמעשה הקריאה - Equal(obj1, obj2 מפעילה את obj1.Equal(obj2. וכמובן שהשאלה הבאה הייתה, אז מה ההבדל ביניהם, והתשובה הייתה נפתח את ה - reflector ונראה. אז הנה הקוד של Equal public static bool Equals( object objA, object objB) { return ((objA == objB) || (((objA != null ) && (objB != null )) && objA.Equals...