1 / 42

תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8

תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8. שיפורים בשפת C#. C# Evolution. מאז הגרסה הראשונה של C# התווספו לה יכולות רבות. על מנת להכיר את היכולות האסינכרוניות החדשות של C# 5 צריך להכיר מקצת מהשיפורים בשפה. Generics.

luisa
Download Presentation

תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל-Windows 8.1 ואפליקציות ל-Windows Phone 8 שיפורים בשפת C#

  2. C# Evolution • מאז הגרסה הראשונה של C# התווספו לה יכולות רבות. • על מנת להכיר את היכולות האסינכרוניות החדשות של C# 5 צריך להכיר מקצת מהשיפורים בשפה.

  3. Generics • Generics שהוצגו בגרסה C# 2.0 הם הרחבה רבת עוצמה של השפה. • מאפשרת להגדיר אוספים, מחלקות, מבנים, מתודות מבלי להתחייב על הטיפוס בזמן כתיבה. • יתרונות: • Type-Safe – בזמן ההקצאה הקומפיילר יודע בדיוק מה הטיפוס (לא יתכן מצב של 1,2,”3”) • מפחית את השימוש ב- Boxing ו-Unboxing. • שיפור גדול בביצועים. • שימוש חוזר באלגוריתמים (חיפוש, מיון....). • תחביר כללי: שימוש ב- <T> להגדרת טיפוס גנרי אשר יוגדר בזמן ריצה.

  4. Generics לפני Generics: עם Generics:

  5. Generics דוגמה נוספת: • לפני Generics: • עם Generics:

  6. Generics שימושים - List: דוגמת קוד: ListSample דוגמת קוד: GenericListSample

  7. Generics שימושים – יצירת רשימות מותאמות: דוגמת קוד: GenericSample01

  8. Generics שימושים – מתודות גנריות: דוגמת קוד: GenericMethod

  9. Generics הרחבת היכולות של List שימושים – הורשה של List: דוגמת קוד: GenericMethod

  10. Generics שימושים – ממשקים:

  11. Generics הגדרת Delegate גנרי • שימושים – Delegate: הגדרת Event הפעלת Event דוגמת קוד: GenericDelegate

  12. Generics • שימושים – Delegate המשך: רישום ל-Event דוגמת קוד: GenericDelegate

  13. Generics אילוצים (Generic Type Constraint) לכל פריט גנרי יש לפחות פרמטר גנרי אחד אשר צריך לספק בזמן ריצה. .NET מאפשרת להגדיר אילוצים המגבילים את בחירת הטיפוסים בזמן ריצה. האילוצים נבדקים בזמן קומפילציה, אם נחרוג מהמוגדר נקבל שגיאה. רשימת אילוצים:

  14. Generics אילוצים דוגמת קוד: GenericConstraints01

  15. Generics אילוצים דוגמת קוד: GenericConstraints01

  16. Implicit Typing - Var • Beginning in Visual C# 3.0, variables that are declared at method scope can have an implicit type var. An implicitly typed local variable is strongly typed just as if you had declared the type yourself, but the compiler determines the type. The following two declarations of i are functionally equivalent: • Local variables can be given an inferred "type" of var instead of an explicit type. The var keyword instructs the compiler to infer the type of the variable from the expression on the right side of the initialization statement. The inferred type may be a built-in type, an anonymous type, a user-defined type, or a type defined in the .NET Framework class library. For more information about how to initialize arrays with var, see Implicitly Typed Arrays (C# Programming Guide). • The following examples show various ways in which local variables can be declared with var: • It is important to understand that the var keyword does not mean "variant" and does not indicate that the variable is loosely typed, or late-bound. It just means that the compiler determines and assigns the most appropriate type. • The var keyword may be used in the following contexts: • On local variables (variables declared at method scope) as shown in the previous example. • In a for initialization statement. var i = 10; // implicitlytypedint i = 10; //explicitlytyped var i = 5; // s iscompiledas a stringvar s = "Hello"; foreach(var item in list){...}

  17. Anonymous Methods • דוגמת קוד הפשוטה הבאה מציגה הגדרה, רישום והפעלה של delegate: • הבעיה - למעשה המתודה Func שנועדה להיקרא על ידי ה- Delegate יכולה להיקרא על ידי כל חלק אחר של התוכנית מבלי שיוצריה התכוונו לכך. הגדרה רישום הפעלה

  18. Anonymous Methods הגדרה • החל מ- C# גרסה 2.0 ניתן לחבר ישירות בין ה- Delegate לבין קטע הקוד אשר אמור להתבצע כאשר הוא מופעל: • לא צריך להגדיר מתודה בצורה מפורשת אלא כותבים מקטע קוד אשר ירוץ בכל פעם שה-Delegate יופעל, הקומפיילר כבר יודע לייצר את המתודה בזמן קומפילציה. • לא ניתן להפעיל את המימוש ללא ה-Delegate. רישום הפעלה

  19. Anonymous Methods • ועם Event: הגדרה אירוע רישום הפעלה

  20. Lambda Expression • בגרסה 1.0C#Delegate קיבל כתובת של מתודה או של הרבה מתודות. • בגרסה 2.0 של C# התווספה לארסנל היכולות של השפה המתודה האנונימית (Anonymous Method) שאפשרה לחבר ישירות בין ה- Delegate לבין קטע הקוד אשר אמור להתבצע כאשר הוא מופעל. • הגרסה השלישית של C# לוקחת אותנו עוד צעד קדימה ומאפשרת לממש את המתודה האנונימית באמצעות ביטוי למבדה (Lambda Expression). • ביטויי למבדה הם שיטה מאוד תמציתית לכתיבת מתודות אנונימיות על מנת לפשט את האופן בו אנו עובדים עם Delegate ב- C#. • השימוש בביטויי למבדה אינו מוסיף פונקציונאליות או יכולות שלא היו קיימות בגרסאות הקדומות יותר של #C.

  21. Lambda Expression • ביטויי למבדה הם Inline Delegate אשר מציגים תחביר ייחודי לטובת מתודות אנונימיות. • ביטויי למבדה הם פשוטים יותר לשימוש אבל דורשים להסתגל לתחביר שונה ממה שהכרנו עד כה. • ביטוי למבדה מורכב משלושה חלקים: לדוגמה: x => x * x הביטוי מקבל פרמטר בודד הנקרא X, הביטוי עצמו עושה שימוש בפרמטר.הטיפוס של X מוגדר בצורה מרומזת, אולם ניתן להגדירו בצורה מפורשת:לדוגמה: (int x) => x * x;אין הבדל בין ההגדרות, ממילא טיפוס הפרמטר מוכתב על ידי ה- Delegate.לאחר הלמבדה אופרטור (=>) נכתב הביטוי עצמו. • ביטויי למבדה יכול לקבל מספר פרמטרים, במקרה זה הפרמטרים חייבים להיות תחומים בסוגריים, לדוגמה: (n1,n2,n3)=>n1 + n2 + n3 Parameters => Execution Code הפרמטרים של הביטוי, 0 או יותר פרמטרים קוד לביצוע Lambda Operator

  22. Lambda Expression המבנה התחבירי של ביטויי Lambda • מבנה של משפט למבדה: params => expression • params – רשימת פרמטרים שהביטוי מקבל, אופציונאלי. • <= - למבדה אופרטור, סדר הקדימות שלו זהה לאופרטור השמה (=). • expression – הביטוי. לדוגמה:x => x * xהביטוי מקבל פרמטר בודד הנקרא X, הביטוי עצמו עושה שימוש בפרמטר.הטיפוס של X מוגדר בצורה מרומזת, אולם ניתן להגדירו בצורה מפורשת:לדוגמה: (int x) => x * x;אין הבדל בין ההגדרות, ממילא טיפוס הפרמטר מוכתב על ידי ה- Delegate.לאחר הלמבדה אופרטור (=>) נכתב הביטוי עצמו. • ביטויי למבדה יכול לקבל מספר פרמטרים, במקרה זה הפרמטרים חייבים להיות תחומים בסוגריים, לדוגמה: (n1,n2,n3)=>n1 + n2 + n3

  23. Lambda Expression הגדרת Delegate דוגמה: השיטה הוותיקה Anonymous Methods Lambda שימו לב שאין התייחסות לערך המוחזר למרות שה- Delegate מחייב זאת, החזרת הערך מתבצעת בצורה מרומזת. דוגמת קוד: LambdaExpressionSample01

  24. Lambda Expression דוגמה, ביטוי למבדה שמקבל מספר פרמטרים: הגדרת Delegate Lambda דוגמת קוד: LambdaExpressionSample02

  25. Lambda Expression • ביטויי למבדה יכולים להכיל מספר משפטים או פקודות. • במקרה זה הביטוי חייב להיות תחום בסוגריים מסולסלים. • ביטויי למבדה הן חלק בלי נפרד משפתC# ו- NET Framework ולכן ניתן להשתמש בכל פקודות השפה ומחלקות המוגדרות ב- NET Framework בתוך ביטויי למבדה. הגדרת Delegate Lambda Return מפורש דוגמת קוד: LambdaExpressionSample03

  26. Lambda Expression בעקבות הפיתוח של Generics ומהניסיון שהצטבר בשימוש בהם הבחינו מנהלי המוצר של .NET Framework שב-99.99% מהמקרים אנחנו משתמשים רק בשלושה סוגים של Delegate: • Predicate - Delegate שמקבל פרמטר ומחזיר bool. • Action - Delegate שמקבל בין 1-16 פרמטרים ואינו מחזיר ערך. • Func - Delegate שמקבל בין 1-16 פרמטרים ומחזיר ערך. * הערה – השניים האחרונים "מועמסים"

  27. Lambda Expression Predicate Delegate public delegate bool Predicate<T>( T obj ) • Delegate שמקבל פרמטר ומחזיר bool. • מייצג מתודה הבודקת עם הפרמטר עומד בסדרה של קריטריונים. • המתודה List<T>.FindAll(Predicate<T> match) בודקת אלו אובייקטים הנמצאים ב-List עומדים בקריטריונים ומחזירה רשימה שלהם. • היא עושה שימוש ב-Predicate כדי להגדיר את הקריטריונים לביצוע הבדיקה.

  28. Lambda Expression דוגמת קוד - Predicate Delegate דוגמת קוד: LambdaExpressionSample04

  29. Lambda Expression Action Delegate public delegatevoidAction<T>( T obj ) Delegate שמקבל בין 1-16 פרמטרים ואינו מחזיר ערך (Overloading). כשמו כן הוא, מייצג פעולה בלבד. למבדה תוך שימוש ב-Action Delegate למבדה תוך שימוש ב-Action Delegate דוגמת קוד: LambdaExpressionSample06

  30. Lambda Expression Action Delegate List<T>.ForEach( Action<T> action) דוגמת קוד: LambdaExpressionSample07

  31. Lambda Expression למבדה תוך שימוש ב-Func Delegate Func Delegate public delegate TResultFunc<T, TResult>( T arg ) Delegateשמקבל בין 1-16 פרמטרים ומחזיר ערך. מייצג פעולה עם ערך מוחזר. למבדה תוך שימוש ב-Func Delegate למבדה תוך שימוש ב-Func Delegate דוגמת קוד: LambdaExpressionSample08

  32. Lambda Expression Func Delegate List<T>.Average<TSource> Method (IEnumerable<TSource>, Func<TSource, Decimal>) דוגמת קוד: LambdaExpressionSample09

  33. Lambda Expression ביטויי למבדה ב- List List מכילה מספר פונקציות המתבססות על ביטויי למבדה. בדוגמאות הבאות נתבסס על ה- List הבא: מיון: דוגמת קוד: LambdaExpressionSample10

  34. Lambda Expression מיון בסדר יורד: סינון: דוגמת קוד: LambdaExpressionSample10

  35. Lambda Expression מיון ע"פ קריטריון: קיבוץ:

  36. Lambda Expression בדוגמאות הבאות נתבסס על ה- List הבא: בחירת שדה: שרשור ביטויים 1: דוגמת קוד: LambdaExpressionSample10

  37. Lambda Expression שרשור ביטויים 2: דוגמת קוד: LambdaExpressionSample10

  38. Lambda Expression למבדה ואירועים: דוגמת קוד: LambdaExpressionWithWPF

  39. Lambda Expression שעשועי למבדה:

  40. Lambda Expression שעשועי למבדה:

  41. Lambda Expression שעשועי למבדה - פתרונות דוגמת קוד: LambdaEX

  42. את הסילבוס, חומרים, מצגות ניתן להוריד ב: www.corner.co.il

More Related