מה חדש ב– C# 6, חלק 7

29 במאי 2016

  בפרק הקודם למדנו על שיפורים בטיפול בשגיאות, הפעם נלמד אודות תוספת למחלקות סטטיות עד היום היה לנו שלושה שימושים במילה using כדי להגדיר namespace שנשתמש בו בקובץ הזה (using System.IO) כדי להגדיר alias עבור מחלקות (using Word = Microsoft.Office.Interop.Word) כדי לעטוף שימוש במשתנה שהמחלקה שלו מממשת IDisposable כך שהקוד נעטף מאחורי הקלעים ב – try finaly, ויש קריאה אוטומטית ל – Dispose.   בגרסה החדשה נוכל להשתמש ב – using כדי להשתמש במחלקות סטטיות, כלומר, במידה ונכתוב using בתחילת הקובץ ל – Console נוכל להפעיל את כל המתודות שלו (WriteLine, ReadLine וכו’) ללא שנצטרך לכתוב...
תגובה אחת

מה חדש ב– C# 6, חלק 6

17 במאי 2016

  בפרק הקודם למדנו על שיפורים ב – Automatic properties, הפעם נראה על שיפורים ב – try catch אחד הדברים שלפעמים נעשה בבלוק של try, זה מספר בלוקים של catch כדי שנוכל לטפל בשגיאה המתאימה, לדוגמה: Code Snippet try { string str = File.ReadAllText("the path.txt"); } catch(FileNotFoundException e) { if (e.FileName.EndsWith(".txt")) { //.... } else { //..... } } catch(Exception e) { //... }   אחד השיפורים שהוכנסו לשפה זו היכולת לכתוב when בבדיקה, כך: Code Snippet try { string str = File.ReadAllText("the path.txt"); } catch(FileNotFoundException e) when (e.FileName.EndsWith(".txt")) { //... } catch(FileNotFoundException e) { //... } catch(Exception e) { //... }   שיפור נוסף שהוכנס לשפה, זה היכולת לכתוב await בתוך בלוק של catch Code Snippet private async static Task NewMethod() { try { await Task.Delay(100); } catch (FileNotFoundException e) { await Task.Delay(100); } } בפרק הבא נלמד על שיפורים בשימוש עם using
תגובה אחת

מה חדש ב– C# 6, חלק 5

12 במאי 2016

  בפרק הקודם למדנו על שיפורים במנגנון Collection Initializers, הפעם נלמד על תוספות ב – Automatic Properties. Properties מאפשרים לבצע אינקפסולצייה למשתנים כך שניתן לבצע לוגיקה לפני שליפת או השמת נתונים, כדי לחסוך הרבה קוד שחוזר על עצמו ולכתוב משתנים לעטוף אותם במאפיינים שלא עושים באמת כלום, ניתן לכתוב Automatic Properties. בגרסה החדשה התווספו שני תכונות מעניינות חדשות, האחד הוא השמה עם ערך ראשוני כמו במשתנים, כך: Code Snippet public string Name { get; set; } = "Shlomo"; בזמן קומפילציה, הקוד יעבור ל – ctor של המחלקה, הקומפיילר הוא חכם, אם יש כמה בנאים הוא יכתוב את קוד ההשמה בכולם, במידה וקראנו מאחד לשני הוא...
2 תגובות

Bootstrap – המדריך – פרק 11 – טפסים אופקיים

לתוכן העניינים בפרק הקודם למדנו על עיצוב טפסים רגילים, היום נראה כיצד מעצבים טפסים בהם הטקסט של הפקד נמצא במקביל לפקד (ולא מעליו)   גם הפעם אציג את התוצאה הסופית לפני שנעבור על הקוד, ושוב יהיה לנו: תיבת טקסט להכנסת מייל תיבת סיסמא סימון של “זכור אותי” שני לחצנים (Login, Register)     להלן הקוד המלא: Code Snippet <div class="row">    <div class="col-md-8 well">        <form class="form-horizontal">            <div class="form-group">                <label class="col-sm-3 control-label">User Name</label>                <div class="col-sm-9">                    <input type="text" class="form-control" />                    <span class="help-block">Press user name</span>                </div>            </div>            <div class="form-group">                <label class="col-sm-3 control-label">Password</label>                <div class="col-sm-9">                    <input type="password"...
אין תגובות

WCF and CORS

11 במאי 2016

בעיית ה – Cross domain היא בעיה ידועה ומוכרת אשר חוסמת פניות AJAX מדומיין אחד לדומיין שני ללא הרשאות מפורשות, כאשר מארחים WCF על IIS, ניתן לפתור את הנושא בעזרת הוספת Headers רלוונטיים ב – Web.config, לעומת זאת כאשר מארחים WCF ב – Windows Service לדוגמא, הדברים קצת מסתבכים. לפני הכול נסביר את הבעיה של Cross domain, התשובה שנשלפת מהמותן  לשאלה של “מה הבעייה” היא “בעיית אבטחה”, אבל עם טיפה מחשבה, נבין שלכאורה אין שום בעיה מ – AJAX לפנות לשרת שלנו שיהווה פרוקסי והוא יפנה לשרת המרוחק, ואז אין שום בעייה (הרי כך עובד כל Web Service) אז...
אין תגובות

jQuery ui datepicker directive for angular with typescript

לאחרונה כתבתי מערכת מבוססת אנגולר עם typescript, והייתי צריך להטמיע jquery ui datepicker, כדי לעשות זאת כתבתי directive קטן שיעזור לבצע את העבודה. אני אציג כאן את שני הגרסאות של הקוד, אחד באנגולר רגיל והשני בעטיפה ל – typescript   אנגולר Code Snippet function datePickerUi() {    return {        restrict: 'A',        require: 'ngModel',        link: function (scope, element, attrs, ngModelCtrl) {            element.datepicker({                isRTL: true,                dateFormat: 'dd/mm/yy',                onSelect: function (date) {                    scope.$apply(function () {                        ngModelCtrl.$setViewValue(date);                    });                }            });            ngModelCtrl.$render = function () {                element.datepicker('setDate', ngModelCtrl.$modelValue);            };            element.datepicker('option', $.datepicker.regional);        }    }} החלק הראשון במתודת ה – link, מטפל ביצירת האלמנט ל...
אין תגובות

מה חדש ב– C# 6, חלק 4

9 במאי 2016

  בפרק הקודם למדנו על Null-conditional Operators, היום נלמד על שיפורים ב - Collection Initializers. אחד הדברים שנכנסו לשפה בגרסאות הקודמות היא היכולת לאתחל אובייקטים (שמממשים את ICollection או לחלופין מממשים את IEnumerable ובנוסף יש להם מתודה בשם Add) בזמן היצירה, משהו בסגנון הזה: Code Snippet var numbers = new Dictionary<int, string> { {1, "seven"}, {9, "nine"}, {13, "thirteen"} };   שיפור נחמד (לא הכי משמעותי בעולם) היא היכולת לכתוב בעזרת Index, Code Snippet var numbers = new Dictionary<int, string> { = "seven", = "nine", = "thirteen" };   שיפור נוסף (שהוא כבר יותר משמעותי) שניתן להשתמש במנגנון של Collection Initializers גם במידה ונוסיף את מתודת Add כ – extension, המשמעות שאנחנו יכולים להוסיף את היכולת...
תגובה אחת

מה חדש ב– C# 6, חלק 3

4 במאי 2016

בפרק הקודם למדנו על Interpolated Strings היום נלמד על Null-conditional Operators כשעובדים עם משתנים מסוגים שיכולים להכיל null, צריך תמיד לבדוק האם יש בהם ערך לפני שנבצע עליהם פעולות, קוד לדוגמה יכול להיות כזה Code Snippet static void Work(Customer customers) { if (customers != null) { Customer c = customers; if (c != null && c.Orders != null) { int res = c.Orders.Length; } } } קוד דומה לזה יהיה כשנחזיק event שלנו ונרצה להרים אותו, נכתוב בדרך כלל משהו כזה Code Snippet static void OnMyEvent() { if (MyEvent != null) { MyEvent(this, EventArgs.Empty); } }   כשנעבוד עם nullable types יש קיצור דרך בעזרת ?? Code Snippet int? res = GetValue(); int data = res ?? 10; אך זה כמובן ספציפית לעבודה עם nullable החידוש בשפה זה...
תגובה אחת

מה חדש ב– C# 6, חלק 2

3 במאי 2016

  בפרק הקודם הכרנו את nameof, בפרק היום נלמד על Interpolated Strings. כשלומדים פיתוח תוכנה בדרך כלל מבקשים מהתלמידים להגדיר משתנה מסוג מחרוזת ומסוג תאריך ולהדפיס שרשור של טקסט על המסך, לרוב התוצאה נראית כך: Code Snippet string name = "shlomo"; DateTime date = DateTime.Now; string res = "my name is " + name + " and my birthdate is " + date.ToString("dd/MM/yyyy hh:mm"); Console.WriteLine(res); בשלב הזה אנחנו מלמדים את התלמידים על string.format, ומציגים להם את הקוד הבא Code Snippet string name = "shlomo"; DateTime date = DateTime.Now; string res = string.Format("my name is {0} and ny birthdate {1:dd/MM/yyyy hh:mm}", name, date); Console.WriteLine(res); מהיום נתרגל להגיד Interpolated Strings, הרעיון הבסיסי מאחורי המילה המוזרה...
2 תגובות

מה חדש ב– C# 6.0, חלק 1

2 במאי 2016

  בפוסט זה נכיר תכונה בשם nameof. אחד הדברים שאנחנו נצרכים להם מידי פעם זה שם המתודה או המאפיין הרלוונטיים באותו רגע, דוגמה לנושא הוא בעולם ה – Windows Application בכל מה שקשור ל – Binding, קיים אירוע בשם INotifyPropertyChanged שמקבל כפרמטר את שם המאפיין, שם למען האמת הנושא נפתר בעזרת CallerMemberName, לקריאה בהרחבה כאן. אבל ישנם הרבה דוגמאות נוספות, (נראה בהמשך בהרחבה) כמו בזמן כתיבת Log נרצה לדעת את שם המתודה, או יצירת ActionLink ב – MVC המקבל את שם Action להפעלה (כיום במחרוזת) ועוד, כדי לפתור את הבעיות הללו, יש לנו אופרטור חדש בשם nameof, השימוש שלו די פשוט למעשה. var...
3 תגובות