How to write to log before and after calling a method (using RealProxy)

30 בנובמבר 2008

רונן עקרי הראה לי את ה RealProxy class  יש לו הרבה שימושים, כאן אני אדגים איך על ידי שימוש ב RealProxy, אפשר לרשום ללוג, לפני ואחרי הפעלת מתודות. נניח שיש לנו class dal שמממש interface שנקרא IDal והם נראים כך:     8 public interface IDal     9 {    10     void SelectAll();    11     void Insert();    12     void Update();    13 }    14     15 public class Dal : IDal    16 {    17     #region Singleton    18     private static IDal m_Instance;    19     20     public static IDal Instance    21     {    22         get    23         {    24             if (m_Instance == null)    25             {    26                 m_Instance = new Dal();    27             }    28     29             return m_Instance;    30         }    31     }    32     33     private Dal()    34     {    35     36     }    37     #endregion Singleton    38     39     #region IDal Members    40     41    ...
תגיות:
3 תגובות

WebPart titles

26 בנובמבר 2008

כשמוסיפים כמה WebParts עם אותו Title, הם מקבלים את השם בתוספת סוגריים מרובעות. MyWebPart MyWebPart MyWebPart העניין הוא, שזה לא באמת מוסיף את הסוגריים והמספר, אלא זה רק מופיע בתצוגה, והכותרת האמיתית של כל ה WebParts היא זהה, וכל ה WebParts נקראים בשם MyWebPart זה יכול לגרום לכל מיני בעיות, לדוגמא, ממשתי Import של WebParts מדף לדף, (בעתיד אני אכתוב פוסט איך עושים את זה), וכשלחצו על Import, המשתמשים ראו TreeView עם רשימת השמות של ה WebPart, אבל היות שלכולם היה שם זהה, אז גם כשהמשתמש בחר אחד מה WebPart, זה היה מייבא לו את כל ה WebPart עם אותו השם. כדי לפתור את...
תגיות:
אין תגובות

Adding a trigger to UpdatePanel at runtime

25 בנובמבר 2008

אם אנחנו רוצים להוסיף AsyncPostBackTrigger ל Update Panel (בקצרה, אם יש לנו לחצן מחוץ ל UpdatePanel ואנחנו רוצים שלחיצה עליו תרפרש רק את ה - UpdatePanel ולא את כל העמוד, אנחנו משתמשים ב Trigger) אם אנחנו רוצים להוסיף את ה - Trigger בזמן ריצה, הקוד שלנו יראה בערך כך:      1     <div>    2         <asp:ScriptManager ID="ScriptManager1" runat="server">    3         </asp:ScriptManager>    4         <asp:Button ID="btnWriteTime" runat="server" Text="Write Time" onclick="btnWriteTime_Click" />    5         <asp:UpdatePanel ID="UpdatePanel1" runat="server">    6             <ContentTemplate>    7                 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>    8             </ContentTemplate>    9             <Triggers>    10     11            </Triggers>    12        </asp:UpdatePanel>    13    </div>        14     protected void Page_Load(object sender, EventArgs e)    15     {    16         AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();    17         trigger.ControlID = "btnWriteTime";    18         trigger.EventName = "Click";    19         this.UpdatePanel1.Triggers.Add(trigger);    20     }    21     22     protected void btnWriteTime_Click(object sender, EventArgs e)    23    ...
תגיות:
תגובה אחת

Automatic properties in Struct

23 בנובמבר 2008

אחד מהחידושים ב - 3.0 #C היה Automatic Properties בעבר היינו כותבים:     1     public class Class1     2     {     3         private int m_MyMember;     4      5         public int MyMember     6         {     7             get { return m_MyMember; }     8             set { m_MyMember = value; }     9         }    10     }    11 } והיום אנחנו יכולים לוותר על הגדרת ה- Member עם כל מה שה- Property עושה, זה get;set, אפשר לכתוב כך:     1     public class Class1     2     {     3         public int MyMember { get; set; }     4     } השאלה, האם אפשר לכתוב Automatic Properties גם ב- Struct, לכאורה, למה לא ?, אז ננסה לכתוב כך:     1     public struct Struct1     2     {     3         public int MyMember { get;...
תגיות:
תגובה אחת

לאיפה נעלמו הפונקציות

21 בנובמבר 2008

בוקר טוב. לא מזמן רציתי לתת פוקוס ל- TextBox, זכרתי שיש פונקציה שנקראת Focus, התחלתי לחפש את הפונקציה, ולא מצאתי אותה, אז כתבתי בעצמי txt.Focus, והקוד התקמפל. לחצתי על F12, והגעתי לפונקציה שנמצאת ב Control ומוגדרת כ public, ואז ראיתי את אחד מהדברים היותר מוזרים שקיימים ב #C, על הפונקציה יש את ה Attribute הבא:  1      2     public bool Focus(); המשמעות של הנ"ל, זה - שאפילו שהפונקציה מוגדרת כ public, וכל אחד יכול להשתמש בה, אבל ב intellisense יראו רק המשתמשים שהגדירו את עצמם כמתקדמים. כדי להגדיר את עצמכם כמתקדמים: Tools->Options->TextEditor->C#->Hide advance members כשתורידו את הסימון, ה-intellisense יתחיל להראות לכם את כל מה שמוגדר כ Advance. הבעייה...
תגיות:
6 תגובות

איפה הקובץ שלי

20 בנובמבר 2008

כשהפרויקט שלנו מתחיל לגדול ומכיל אלפי קבצים, זה מתחיל להיות קשה למצוא קובץ מסוים ב sln, מה שאנחנו עושים בדרך כלל, זה, Ctrl+f ומחפשים משהו שאנחנו מקוים שנמצא בקובץ. חבר שלי רונן עקרי, הראה לי טריק נהדר. תלחצו על / + ctrl, זה יביא אתכם ל חלק המודגש.   תכתבו שם: of < ותתחילו לכתוב את שם הקובץ, ותקבלו את רשימת הקבצים שמתחילים במה שכתבתם. בחירה בקובץ ו enter יפתח את הקובץ.   למעשה בתיבת הטקסט אפשר לכתוב המון commands הנה הרשימה המלאה
תגיות:
3 תגובות

EventArgs<T>

19 בנובמבר 2008

היי הרבה מה events שלנו הם מסוג EventHandler ומוגדרים בצורה הבאה:     1     public event EventHandler MyEventHandler; בהמון מקרים אנחנו רוצים לשלוח ב EventArgs פרמטר אחד מסוג string, int ועוד. אז במקום לייצר כל פעם CustomEventArgs אפשר להשתמש ב class הבא:     2         public class EventArgs<T> : EventArgs     3         {     4             public EventArgs(T data)     5             {     6                 Data = data;     7             }     8      9             public T Data { get; set; }    10         } והשימוש יהיה כך:     3     public event EventHandler<EventArgs<int>> MyEventHandler;     4      5     protected void OnMyEventHandler(object sender, EventArgs<int> e)     6     {     7         if (MyEventHandler != null)     8         {     9             MyEventHandler(sender, e);    10         }    11     }    12     13    ...
תגיות:
3 תגובות

How To: Force a switch block to indicate a compile time error when none of the case clauses are satisfied

17 בנובמבר 2008

בדרך כלל כשאנחנו עושים switch על value כלשהו, אנחנו כותבים קוד גם עבור ה- default     1     private void MyFunction(int value)   2     {   3         switch (value)   4         {   5             case 1:   6                 // ..   7                 break;   8             case 2:   9                 // ..   10                break;   11            default:   12                // ..   13                break;   14         }   15    }   לפעמים הקוד שאנחנו כותבים ב default הוא:   1 throw new NotImplementedException(value.ToString()); הבעייה, מה קורה כשאנחנו רוצים לקבל Compile Error אם אם ה value לא מתאים לאחד מה case. כמובן שבמקרה שלנו שה value אינו ידוע מראש, כמו בדוגמא הקודמת שה value הוא int, אי אפשר לבקש Compile Error, אבל נסתכל על המקרה הבא:       1     public enum DatabaseProviderType     2     {     3         SqlServer,     4         Oracle     5     }       6     private void MyFunction(DatabaseProviderType value)    ...
תגיות:
3 תגובות

Update gui controls without MethodInvoker (SynchronizationContext)

13 בנובמבר 2008

שלום לכל הקוראים. חבר שלי, שי קרן, הראה לי class חדש שלא הכרתי  בשם SynchronizationContext אני רוצה שנכיר את אחד מהשימושים של ה Class הזה. נחשוב על הסיטואציה הבאה: יש לנו מתודה בתוך Form שתפקידה לכתוב על Label את התאריך.      1     private void UpdateLabel()    2     {    3         label1.Text = DateTime.Now.ToLongTimeString();    4     } ואנחנו מפעילים אותה מתוך Thread אחר        1     private void WorkWithThread_Click(object sender, EventArgs e)    2     {    3         Thread thread = new Thread(delegate()    4         {    5             UpdateLabel();    6         });    7     8         thread.Start();    9     } מה שיקרה בפועל, שהאפליקצייה תתרסק עם ה Exception הבא:   Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on הסבה לכך היא, שאנחנו מנסים לעדכן Control...
תגיות: ,
6 תגובות

Stop Painting Yourself

11 בנובמבר 2008

בוקר טוב. בפוסט הקודם עדי העיר לי שהייתי צריך לספר קצת על עצמי בפוסט הראשון, אז בפוסט הראשון פיספסתי, אבל אספר קצת על עצמי בפוסט השני. תמיד אהבתי מחשבים, אבל לתחום התכנות הגעתי לפני כארבע שנים, כשמכללת סלע בשיתוף עם ג'וינט ישראל עשו (ועושים) מסלולי לימוד לחרדים כדי לעזור לנו לצאת לשוק העבודה (מה שבאמת קורה), מאז ועד היום( וגם בעתיד הקרוב והרחוק) אני נמצא בסלע, בשנה וחצי האחרונים הייתי בחברת QualiSystems מטעם חברת סלע, QualiSystems מפתחת מוצר מדהים של בדיקות אוטומטיות לחומרה, עיקר העבודה שלי היא ב Web וב Win אני מקווה בקרוב גם להתחיל לפתח ב Silverlight, ואני גם מרצה...
תגיות:
4 תגובות