Browse by Tags
All Tags »
Reflector (
RSS)
בפוסט הקודם תיארתי כיצד לעקוף את הבדיקה של טלריק האם המוצר נקנה או שהוא גרסת ניסיון - על הדרך הבטחתי לספר איך להשתמש ב - reflector. אמנם פוסט זה לא כל כך קשור לאבטחת מידע (או לעצלות של מפתחים) אבל הוא דומה לפוסט הקודם. למי שלא מכיר את reflector ה - reflector הוא אחד מהכלים המדהימים ביותר שיצאו אי פעם כדי לעזור למפתחים, לצערי הרב מתי שהוא הם החליטו לגבות כסף על התוכנה (35$ לגרסה הבסיסית ו - 95$ לגרסה המלאה). כרגיל אני אדגיש שאני חלילה לא מעודד לגנוב אותם, אלא רק מראה עד כמה חשוב לכתוב קוד נכון. במידה...
כמו שהבטחתי בפוסט הקודם אני אראה דרך קצרה יותר לממש את IEnumerable ללא מימוש עצמאי של IEnumerator בעזרת yield. ראשית נראה את הדוגמא ואז את ההסברים: הנה המחלקה מהפוסט הקודם: class PersonManager : IEnumerable { private List < Person > _persons; public PersonManager() { _persons = new List < Person >(); } public IEnumerator GetEnumerator() { } } כעת נממש את המתודה בעזרת yield. public IEnumerator GetEnumerator() { foreach ( var item in _persons) { yield return item; } } למעשה אפשר פשוט להשתמש...
הוספה של User Control לעמוד. במידה ואתם עובדים עם User Controls יש שתי דרכים להשתמש בהם בדפי ה - aspx שלנו. דרך אחת להוסיף שורת Register בתחילת העמוד: <% @ Register src ="~/UserControl.ascx" tagname ="UserControl" tagprefix ="uc1" %> דרך נוספת היא לרשום את ה - UserControl בקובץ ה - web.config, כך: < system.web > < pages > < controls > < add src = " ~/UserControl.ascx " tagName = " UserControl " tagPrefix = " uc1 "...
מה זה ואיך משתמשים ב - Reflector קבלתי שאלה במייל - "מה זה reflector?מה השימוש בו וכיצד" כדי לענות על השאלה חשבתי לכתוב פוסט שידגים את השימוש בו. לפני שנדבר על הכלי המופלא שנקרא ה - Reflector, צריך לוודא שאנחנו מבינים את תהליך העבודה ב - net. (התמונה לקוחה מהמצגות של סלע .) התהליך מתחיל כמובן בזה שאנחנו כותבים קוד באחת משפות NET. ממשיך לקומפילצייה במידה והתהליך עבר בהצלחה אנו מקבלים קובץ exe/dll (תלוי בסוג הפרויקט). מה שהקובץ באמת מכיל אינו קוד בינארי אלא קוד בשפה שמכונה intermediate language...
אם קבלתם את ההודעה הבאה: Value is not valid for OracleType: 0. Parameter name: oracleType מן הסתם כתבתם את הקוד הבא OracleParameter param = new OracleParameter ( "name" , 0); מה שאתם צריכים לעשות זה אחד מהשניים int num = 0; OracleParameter param = new OracleParameter ( "name" , num OracleParameter param = new OracleParameter ( "name" , Convert .ToInt32(0)); זה לא יעבוד OracleParameter param = new OracleParameter ( "name" , ( int )0); הסיבה לשגיאה זה הדרך שבה...
בתפוז נשאלה השאלה הבאה: איך אפשר לגרום ל - WebClient לשלוח בקשה עם Encoding של 1255 ולא utf8. בהתחלה מישהו אמר שאפשר להשתמש במאפיין Encoding - כלומר הקוד הבא: WebClient client = new WebClient (); client.Encoding = Encoding .GetEncoding(1255); string str = client.DownloadString( http://www.google.co.il ); משום מה זה לא עבד - מעיון קצר ב - Reflector מסתבר שהמאפיין הזה משפיע אך ורק על תרגום הבתים שחוזרים מהבקשה, כלומר מאחורי הקלעים מפעילים את המתודה DownloadByte וכדי לדעת באיזה Encoding לתרגם את התוצאה...
עמית לעבודה שאל אותי האם כשמגדירים nullable זה יושב ב - stack או ב - heap, בהתחלה עניתי בלי לחשוב שזה יושב ב - heap, אבל אז חשבנו שזה לא הגיוני כי אם זה יושב ב - heap אז מה כל החכמה בזה ? ואז הסתכלנו וראינו ש - nullable הוא למעשה struct ולא class, מה שאומר שהגדרה של ?int תשב ב - stack. ואז שאלנו את עצמנו איך יכול להיות שאפשר לתת את הערך null או לבדוק האם מופע של nullable הוא null. חקרנו קצת בעזרת ה - reflector ועלינו על הממצאים הבאים: אין ולא יכול להיות הערך null במופע של nullable , מה שקורה באמת...
בהמשך לפוסט הזה , (שהראה איך להוסיף Validator ל - DetailsView שנוצר בצורה דינמית) אני רוצה להדגים איך להוסיף פקדים בצורה דינמית. לפני הכל, את המאמר הבא - ASP.NET Page Life Cycle Overview כל מפתח ב - ASP.NET צריך להכיר בעל פה. נניח שבזמן Edit אנחנו רוצים להוסיף CheckBox לתא הראשון. הקוד יראה כך: protected void DetailsView1_ModeChanging( object sender, DetailsViewModeEventArgs e) { DetailsView1.ChangeMode(e.NewMode); Bind(); CheckBox chk = new CheckBox (); chk.ID = "CheckBox1" ; DetailsView1...
אחד מהפקדים הנחמדים לעבוד עם מידע הוא ה - DetailsView, הוא יודע להציג מידע לאורך במקום לרוחב (כמו Grid) ומתאים מאוד לעידכון של שורה אחת. בדרך כלל מה שאני עושה זה להציג Grid עם כל הנתונים וכשבוחרים שורה מתוך ה - Grid אני מציג את הנתונים של אותה שורה ב - DetailsView. לאחרונה רציתי לעבוד איתו בצורה דינמית כלומר - לא להגדיר מראש ב - aspx את כל העמודות. ורציתי להוסיף לאחד העמודות RequiredFieldValidator. נשמע פשוט לא, אז נראה את הקוד. בהתחלה אני מקשר טבלה (עם שורה אחת) ל DetailsView protected void Page_Load...
vb.net זה רע, אני נמצא כרגע בחברה מסוימת שלדאבוני כל הקוד שלהם הוא ב - vb.net ולא ב - #C, (הדבר היחיד הטוב שיוצא לי מזה, שאני יכול לכתוב בקורות חיים שיש לי גם נסיון ב - vb.net :) ) בכל מקרה יצא לי להיתקל בקוד הבא: (בערך) Dim j As Integer ? = Nothing Dim i As Integer = IIf(j.HasValue, j.Value, 6) Console.WriteLine(i) אם היינו משווים את הקוד הזה ל - #C זה היה נראה ככה: int ? j = null ; int i = j.HasValue ? j.Value : 6; Console .WriteLine(i); בפועל במקרה ש - j היה null תמיד היה נזרק שגיאה של "Nullable...
כשהראתי לסטודנטים שאני מלמד את הפוסט של ספיריטוס שמדבר על ההבדלים בין 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...
נניח שיש לכם את הקוד הבא: < asp : TextBox ID ="TextBox1" runat ="server"></ asp : TextBox > < asp : TextBox ID ="TextBox2" runat ="server"></ asp : TextBox > < asp : RequiredFieldValidator ID ="RequiredFieldValidator1" runat ="server" ErrorMessage ="RequiredFieldValidator" ControlToValidate ="TextBox1"></ asp : RequiredFieldValidator > < asp : CompareValidator ID ="CompareValidator1"...
אז דברנו על זה שהקומפיילר מרגיש חופשי לשחק עם הקוד שלנו איך שנראה לו, ולהפוך בלוקים של switch לבלוקים של if, ואנחנו לא ממש מבינים מה הקומפיילר מנסה לעשות. אז כשיש כאלו שאלות, למי פונים, כמובן ל סשה . אז שלחתי לו מייל עם השאלה, ואני מעתיק לכאן את התשובה שלו, ותודה על התשובה המפורטת. הקומפיילר רשאי לממש את זה באיזה אופן שמתחשק לו, כל עוד הסמנטיקה של הקוד שלך נשמרת. למשל, עבור switch על הרבה string -ים שונים הקומפיילר מייצר Dictionary ומשתמש בו כדי לבדוק לאיזה מקרה אתה מגיע (אתה יכול לבדוק את זה בקלות...
טוב, כנראה החוויה הקשה שעברתי עם מחיקת הפוסט של ה FxCop בזמן publish, לא עוזבת אותי, כי אני ממשיך לכתוב אודותיו. בכל מקרה, המשכתי קצת לשחק עם הקוד, וגיליתי משהו מעניין, החוק שמחייב אותנו, לממש case עבור כל האפשריות ב enum, עובד רק עם ממשנו יותר מ case אחד, במדה וממשנו רק case אחד, ה Code Analysis יתעלם לגמרי מכל מה שאנחנו כותבים והוא יעביר את הקוד קומפילציה, אז כדי להבין מה קורה, כתבתי את הקוד הבא, והסתכלתי ב reflector, וגיליתי דברים חדשים, 1 public void f2( MyEnum myEnum) 2 { 3 switch (myEnum) 4...