C# 4.0 Part 11 – Named Parameters

29 ביוני 2009

  ל - Optional Parameters יש בעיה אחת קטנה.       static void Add(int id, string name = "shlomo", float age = 0)     {     }       static void Main()     {         Add(22, ,24);     }     זה לא מתקמפל וכמובן מאוד לא ברור. ולכן המציאו את ה - Name Parameters.       static void Main()     {         Add(22, age: 24);     }     גם עבור פרמטרים שהם חובה ניתן לשלוח עם השם:       static void Main()     {         Add(id: 22, age: 24);     }   זה גורם שהקוד שלנו יהיה יותר קריא. אבל צריך להיות זהירים עם השימוש ב - Named Parameters. (פוסט מומלץ לקריאה - כאן). החל מ - C# 4.0 אסור לשנות את...
3 תגובות

C# 4.0 Part 10 – Optional Parameters – Behind The Scenes

28 ביוני 2009

  פספסתי את הפוסט של מוצאי שבת, (אולי אני אכתוב היום שניים).   בכל מקרה אנחנו רוצים לדעת מה קורה מאחורי הקלעים כשמשתמשים ב - Optional Parameters.   למעשה מייקרוסופט משתמשים בשני Attributes שקיימים כבר המון זמן. הראשון הוא - System.Runtime.InteropServices.OptionalAttribute והשני הוא - System.Runtime.InteropServices.DefaultParameterValueAttribute, למעשה הקוד הבא:       static void Add(int id, string name = "", float age = 0)     {     }   מתרנדר לקוד הבא:       static void Add(int id,                     string name,                     float age)     {     }   ולמעשה אפשר להשתמש עם ה - Attributes האלו לבד וזה יעבוד באותו צורה.   יותר מכך - כשמגדירים משתנה כלשהו לברירת...
2 תגובות

C# 4.0 Part 9 – Spell Checking with word using Optional Parameters

26 ביוני 2009

   כמו שהבטחתי אני רוצה להדגים שימוש ב - Optional Parameters.     הקוד הבא משתמש בבדיקת האיות של Word.         public static void Main()     {         Application word = new Application();           object missingValue = Type.Missing;                 Document doc = word.Documents.Add(ref missingValue, ref missingValue,                                         ref missingValue, ref missingValue);         doc.Activate();           SpellingSuggestions suggestions =             word.GetSpellingSuggestions("placa",                                 ref missingValue, ref missingValue,                                 ref missingValue, ref missingValue,                                 ref missingValue, ref missingValue,                    ...
3 תגובות

C# 4.0 Part 8 – First glance on the Optional Parameters

25 ביוני 2009

  אחד מהתכונות החדשות של C# 4.0 היא Optional Parameters.   למעשה - המצב עד היום שלא היה לנו את האופציה של פרמטרי רשות, הרגיל אותנו לכתוב קוד לא כל כך נכון, למה הכוונה -  שימו לב לשני קטעי הקוד הבאים, הראשון - עושה overload למתודת Abs וקטע הקוד השני עושה overload למתודת Add. אז מה בכל זאת ההבדל ?        public static class Math     {         public static decimal Abs(decimal value);         public static double Abs(double value);         public static float Abs(float value);         public static int Abs(int value);         public static long Abs(long value);         public static sbyte Abs(sbyte value);         public static short Abs(short...
3 תגובות

C# 4.0 Part 7 – dynamic Limitations

24 ביוני 2009

  דברנו מספיק על dynamic, הגיע הזמן להתקדם לתכונות נוספות וחשובות של C# 4. הדבר היחיד שנשאר בנושא של dynamic זה לדעת מה אי אפשר לעשות באמצעות dynamic.   ההבנה הכי חשובה בנושא, היא - שאי אפשר (באמצעות CSharpBinder) לעשות עם dynamic יותר ממה שאפשר לעשות עם האובייקט במידה והיינו ניגשים אליו בצורה לא דינמית, היות שאנחנו יודעים שלמעשה dynamic הוא object. מה שכן - אפשר לרשת מ - DynamicObject או לרשת מ - CSharpBinder, (אבל לא כתבתי על זה עדיין פוסט).     1. אי אפשר לגשת למאפיין או מתודה שהם לא ברמת ההרשאות שלנו, כלומר לגשת ל - private או ל - internal מתוך assembly...
תגיות: , , , ,
אין תגובות

C# 4.0 Part 6 – DynamicObject class and IDynamicMetaObjectProvider interface

23 ביוני 2009

  אחד הדברים המתסכלים בללמוד חומר על טכנולוגיה חדשה שעדיין לא יצאה בגרסה סופית, זה שבכל גרסת ניסיון נוספת ה - API עלול להשתנות, וזה מתסכל כי אף אחד לא מעדכן אותך שה - API שהיה קיים בגרסה אחת השתנה והוא נראה שונה לגמרי בגרסה הנוכחית, ב - PDC הודגם ממשק שנקרא IDynamicObject - הממשק הזה נעלם, לא קיים יותר. ולמעשה היות שכל הפוסטים שלי בנושא אינם מדברים על הגרסה הסופית של המוצר, יכול מאוד להיות שכש - C# 4.0  תצא לאויר בגרסה רשמית הדברים שוב ישתנו. אז קחו את זה לתשומת לבכם.       כמו שהבטחתי בפוסט הקודם אני אראה בפוסט הנוכחי איך...
תגיות: , , , ,
תגובה אחת

C# 4.0 Part 5 – Behind The Scenes Part 2

22 ביוני 2009

  אז אחרי שהבנו אתמול Expression Tree והבנו שלשום שלמעשה כל dynamic הוא object, כעת נראה מה קורה כשעושים פעולות על dynamic.   מה לדעתכם מתרנדר כשכותבים את הקוד הבא:       int i = 10;       dynamic d = i;     d++;   למעשה מה שקורה זה הקוד הבא (בערך - כי שיניתי את השמות של המשתנים)       private static class SiteContainer     {         public static CallSite<Func<CallSite, object, object>> p1;     }         static void Main(string args)     {         if (SiteContainer.p1 == null)         {             SiteContainer.p1 = CallSite<Func<CallSite, object, object>>.Create(                 new CSharpUnaryOperationBinder(                     ExpressionType.Increment,                     false,                     new CSharpArgumentInfo {        ...
תגיות: , , ,
2 תגובות

C# 4.0 Part 4 – Understanding Expression Tree

21 ביוני 2009

  אז בפוסט הקודם ראינו שלמעשה אין ב - Runtime טיפוס dynamic, וכל מה שאנחנו משימים לתוך dynamic עובר להיות object.   בפוסט הזה הייתי רוצה להראות מה קורה מאחורי הקלעים כשעושים פעולות על אובייקט מסוג dynamic.     אבל - כדי להבין את הקוד שמתרנדר חייבים הבנה בסיסית ב - Expression Tree היות שכל המנגנון עובד עם Expression. ולכן בפוסט הזה אסביר על expression tree ובפוסט הבא נכנס למה שקורה מאחורי הקלעים.     כשהתחלתי ללמוד את C# 4.0 והבנתי שאני חייב להבין קודם Expression Tree, הגעתי לפוסט המצויין הזה, ואני ממליץ לכולם לקרוא אותו.   למעשה מייקרוסופט המציאו את ה - Expression Tree עבור Linq To Sql, כי...
3 תגובות

C# 4.0 Part 3 – Behind The Scenes Part 1

20 ביוני 2009

  שני הפוסטים הקודמים עסקו בהבנה איזה שימוש אפשר לעשות עם ה - dynamic. הראשון היה הדגמה פשוטה של היכולות בעוד השני הדגים את הדוגמא הפופולרית (שכולם כותבים אבל אף אחד לא מדגים) בכל המאמרים על C# 4.0 התוכנית GetCalculator.     כעת ננסה להבין מה מתרחש מאחורי הקלעים.   למעשה ההבנה מה מתרחש מאחורי הקלעים, מתחלקת לשניים   הראשון - מה קורה כשעושים השמה לתוך dynamic. השני - מה קורה כשמפעילים מתודות או ניגשים למאפיינים של אותו dynamic.   הפוסט הזה יעסוק בשאלה הראשונה, הפוסט הבא יתחיל לענות על השאלה השנייה.     אז לפני הכל - השאלה שנשאלת, האם באמת קיים טיפוס חדש בשם dynamic ?   והתשובה היא לא, אין חיה כזאת...
תגיות: , , ,
אין תגובות

C# 4.0 Part 2 (The "GetCalculator program)

19 ביוני 2009

  אז כמו שהבטחתי בפוסט הקודם אני אדגים שימוש אמיתי ב - dynamic,   אפשר להוריד את התוכנית מכאן (נפתח ב VS2010)     כל מי שקרה מאמר או פוסט כלשהו על C# 4.0 ראה את הדוגמא הבאה (להסבר על dynamic)   במקום לכתוב את הקוד הזה:       object o = GetCalculator();     MethodInfo mi = o.GetType().GetMethod("Add");     int res = (int)mi.Invoke(o, new object { 2, 3 });     אפשר לכתוב את הקוד הבא:       dynamic o = GetCalculator();     int res = o.Add(2, 3);     הדוגמא הזאת תמיד הטרידה אותי, הרי אי אפשר להפעיל מתודות שהם לא public באמצעות dynamic, אז בהכרח המתודות של ה - Calculator הם public, אז מדוע שמישהו ירצה להפעיל את...
תגיות: , , , ,
4 תגובות