PracticU

חידושים ב-C# ver 4

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מתקדם - #Advanced .NET C › חידושים ב-C# ver 4
מילון מושגים:
C# - שפת תכנות מונחית עצמים של מיקרוסופט, המשמשת בעיקר לפיתוח יישומים על פלטפורמת .NET.
Visual Studio - סביבת פיתוח משולבת (IDE) של מיקרוסופט לכתיבה, ניפוי והרצה של קוד, בעיקר בשפות .NET.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
קומפיילר - תוכנה שממירה קוד מקור שנכתב בשפת תכנות לקוד שהמחשב יכול להריץ, ומדווחת על שגיאות תחביר.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.

חידושים ב-C# ver 4
השיעור עוסק ב-C# 4, שיצאה ב-2010 עם Visual Studio 2010. התוספות העיקריות הן פרמטרים אופציונליים ופרמטרים בשם, טיפוס דינמי, ומושגי covariance ו-contravariance.
פרמטרים אופציונליים
1. הבעיה: כדי לאפשר קריאה עם מספר שונה של פרמטרים צריך להעמיס כמה פונקציות עם אותו שם. הדוגמה: פונקציית הדפסה שמקבלת הודעה, ואחר כך גם צבע, ואחר כך גם מספר פעמים.
2. הפתרון: פונקציה אחת שבה לפרמטרים יש ערך ברירת מחדל. הפרמטר נכתב עם ערך אחרי סימן השוויון, למשל צבע אפור וכמות 1.
3. סדר: פרמטרים אופציונליים חייבים להופיע אחרי כל הפרמטרים החובה.
פרמטרים בשם
4. השימוש: בקריאה כותבים את שם הפרמטר עם נקודותיים ואחריו הערך, למשל times: 3. אפשר לשלוח את הפרמטרים בסדר אחר מזה של ההגדרה.
5. דילוג: עם פרמטרים בשם אפשר לדלג על פרמטר אופציונלי באמצע ולשלוח רק את הפרמטר שאחריו. למשל לשלוח רק את הצבע ולהשאיר את ההודעה והכמות בערכי ברירת המחדל.
טיפוס דינמי
6. הגדרה: משתנה מסוג dynamic מקבל כל ערך, והקומפיילר לא בודק את החברים שלו בזמן הקומפילציה. הבדיקה נעשית בזמן הריצה.
7. דוגמה: מחלקה Product בלי שדות, ואובייקט דינמי שמקבל ממנו מאפיינים. הקומפיילר לא מתלונן, אבל אם המאפיין לא קיים בזמן הריצה מתקבלת חריגה.
8. שימוש: מתאים כשמקבלים נתונים משפות שאינן מוקלדות חזק, כמו JavaScript, ומעדיפים לא להגדיר מחלקה מראש.
Covariance ו-Contravariance
9. הגדרה: Covariance היא המרה מטיפוס צר לטיפוס רחב יותר, ו-contravariance היא ההפך. מילות המפתח out ו-in בהגדרת הממשק קובעות את הכיוון.
10. IEnumerable: out מאפשר להחזיר אוסף של מחלקה נגזרת כאוסף של מחלקת הבסיס. לכן אוסף של Employee נשלח לפונקציה שמצפה לאוסף של Person.
11. IComparer: in מאפשר להשתמש במשווה שמיועד ל-Person על רשימה של Employee.
12. מה זה נותן: קוד שמשתמש בטיפוס הבסיס עובד גם עם נגזרות, בלי המרה מפורשת.
השיעור מסביר את התוספות האלה כמה שנים לפני שהן נכנסו לשגרה, ולכן כדאי להכיר אותן גם בקוד ישן.
השיעור הבא בקורס: תרגילים על חידושים ב-C# ver 4

פרקי ההרצאה: חידושים ב-C# ver 4

  1. 00:00

    חידושי C# 4 - סקירה

  2. 01:19

    הצורך ב-OPTIONAL PARAMETERS

  3. 06:02

    ערכי ברירת מחדל לפרמטרים

  4. 08:39

    פרמטרים אופציונליים חייבים להיות אחרונים

  5. 10:56

    NAMED PARAMETERS לקריאה בשם

  6. 14:16

    שילוב NAMED ו-OPTIONAL PARAMETERS

  7. 17:07

    המילה השמורה DYNAMIC

תמלול ההרצאה: חידושים ב-C# ver 4

הטקסט המלא של הדקות הראשונות בהרצאה «חידושים ב-C# ver 4» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    אנחנו מגיעים ל-C-Sharp 4 שיצאה ביחד עם Visual Studio 2010 בשנת 2010 והחידושים שהתווספו ב-C-Sharp 4 הם החידושים הבאים Optional Parameters מאפשר לנו להגדיר ערכי ברירת מחדל לפרמטרים שמתקבלים לפונקציה Named Parameters מאפשר לנו להגדיר אילו פרמטרים אנחנו רוצים להכניס אליהם את הערכים

  2. 00:37

    שאנחנו שולחים לפונקציה. המילה השמורה dynamic שמאפשרת לנו להגדיר משתנה שאפשר להכניס אליו כל ערך, להשתמש עם פונקציות שיש בו, אך בזמן הקומפילציה קיום הפונקציות לא באמת נבדק אלא רק בזמן הריצה.

  3. 00:58

    אנחנו הולכים לראות דוגמה לכל אחד מהדברים האלה. ונושא שנקרא covariance וcontravariance, אנחנו הולכים לראות מה זה בדיוק אומר הדבר הזה ואיך זה שימושי.

  4. 01:12

    אז בואו נצלול ונראה דוגמה אחת מכל אחד מהדברים האלה. הדבר הראשון שאנחנו הולכים לראות זה את ה-Optional Parameters.

  5. 01:22

    ה-Optional Parameters מתייחס לפונקציות ולפרמטרים שהפונקציות מקבלות. בואו נניח שאנחנו כותבים איזושהי פונקציה, נקרא לה פרינט, ואנחנו רוצים בפרינט הזאת לקבל String Message.

  6. 01:44

    אוקיי, אז בואו פשוט נציג את המסאג', נקרא לפונקציה, נריץ והכל עובד כמו שצריך. עכשיו, מה קורה אם אנחנו רוצים לבצע עוד העמסה של הפונקציה, כלומר לכתוב פונקציה עם שם דומה אבל עם מספר פרמטרים או טיפוס פרמטרים שונה, ושתבצע כמובן את אותו

  7. 02:16

    הדבר אחרת לא הייתי קורא לה באותו השם. בוא נניח שהפונקציה הנוספת שאני רוצה לכתוב תקבל גם מסאג', וגם באיזה צבע להציג את המסג'.

  8. 02:30

    אז אין לנו שום בעיה לבצע את ההעמסה הזאת, בואו נשלים את הפונקציה. console. foregroundColor יקבל את ה-Color, סיום ההדפסה, קונסול נחזיר את ה-Color למצב ה-Defaultי שלו, ואנחנו אומרים כזה דבר: יש לנו עכשיו שתי פונקציות, הן מועמסות, אנחנו יכולים לקרוא על ידי Hello לפונקציה הראשונה,

  9. 02:56

    מפני שזאת החתימה שלה, ואנחנו יכולים לקרוא, שימו לב שאנחנו יכולים לדפדף פה בין שתי החתימות ולקרוא גם לפונקציה עם החתימה השנייה, לשלוח לה איזשהו צבע וכל פעם תתבצע קפיצה לפונקציה אחרת.

  10. 03:15

    בואו נבצע העמסה נוספת ונגדיר שהפעם אנחנו מקבלים int times ופה אנחנו אומרים בעצם כמה פעמים אנחנו רוצים להדפיס את ה-message.

  11. 03:33

    נרוץ פה Add Times ואת ההדפסה נעשה פה. אם עכשיו אנחנו באים ואומרים בעצם אנחנו רוצים לקרוא ל-Print אבל לשלוח לה, או נשלח פה First Message, נשלח כאן Second Message ונשלח כאן Third Message בכדי לראות את ההבדלים ביניהם, אנחנו יכולים להגיד לו Color Red ואנחנו רוצים ארבע פעמים.

  12. 04:10

    שימו לב שיש פה קריאה לכל אחת מהפונקציות והכל עובד כמו שצריך. מה הבעיה עם הקוד הזה? יש פה שכפולים של קוד. לכן כאשר תמיד היינו מבצעים את הקונספט של ההעמסות של הפונקציות לא היינו משכפלים קוד אלא היינו כותבים את כל הפונקציה כנראה בדרך כלל זה יהיה בפונקציה שמקבלת הכי הרבה פרמטרים ומהפונקציות שמקבלות

  13. 04:39

    פחות פרמטרים היינו קוראים לפונקציות שמקבלות הרבה פרמטרים ורק שולחים להם את הערכים עם ערכי default אחרים. לדוגמה, היינו שולחים print message עם color ו-times 1, ואז היינו יכולים לחסוך את שלושת השורות האלה.

  14. 05:00

    ופה היינו צריכים לקרוא ל-print ולשלוח רק את המסג' עם איזשהו default color. נשלח color.gray, אם אני לא טועה, זה ה-default color של הקונסול. וכך מה שהיינו יכולים לעשות זה פשוט לכתוב רק את התוכן כאן ולשלוח מהפונקציה השנייה לפונקציה השלישית עם איזשהו ערך ברירת מחדל, מהפונקציה הראשונה לפונקציה השנייה עם איזשהו

  15. 05:33

    ערך ברירת מחדל והכל אמור לעבוד אותו הדבר בלי לחזור על שורות קוד. אחלה.

  16. 05:42

    אבל אם שמתם לב עדיין כתבנו פה את שתי הפונקציות האלה רק בשביל לבצע את הקריאות וזה קצת מיותר. אוקיי בואו את כל אלה נשים בצד ונראה מה זה optional parameters.

  17. 06:02

    optional parameters מאפשר לנו לכתוב פונקציה פעם אחת. נכתוב את הפונקציה print, הפונקציה תקבל את כל הערכים, יש לנו פה למעשה את שלושת אלה, נעתיק, נדביק וכמובן נכתוב את הקוד שלהם בצורה כזאת.

  18. 06:27

    אז אנחנו רואים שיש לנו כאן את כל הערכים ולכן הקריאה השלישית עובדת ואין לנו שתי קריאות, אין לנו שתי פונקציות ראשונות שמקבלות רק את המסאג' ופונקציה אחרת שמקבלת מסאג' וגרין.

  19. 06:43

    אבל אנחנו יכולים לבוא ולעשות את הדבר הבא. Console color, color, ולתת לו איזשהו ערך דיפולט. לדוגמה, את אותו גריי שמקודם נתנו. ואת ה-Times, לתת לו איזשהו ערך דיפולט.

  20. 06:59

    לדוגמה, את ה-1 שמקודם נתנו. ושימו לב שזה עובד אותו הדבר. נריץ, והופה, חסכנו לכתוב את הפונקציות. אז מה בעצם קרה כאן? מה שאמרנו פה זה דבר כזה: הנה פונקציה, אנחנו יכולים לתת לה מסג', אבל אנחנו לא חייבים לתת לה color ואנחנו לא חייבים לתת לה int times.

  21. 07:27

    אם אנחנו לא נותנים, אלה ערכי בריאת המחדל. כאשר אנחנו באים לפתוח ולהשתמש בפונקציה אנחנו לא רואים דפדוף של מספר פונקציות, ערכי הברירת מחדל תמיד עוטפים אותם בסוגריים מרובעים.

  22. 07:44

    סוגריים מרובעים גם בשפות אחרות בטול טיפ מציין שזה ערך ברירת מחדל ואנחנו לא חייבים לשלוח. האם אנחנו אבל יכולים להפעיל את הפונקציה בצורה כזאת?

  23. 07:56

    אז כמובן שמסאג' אין לו ערך ברירת מחדל ולכן אנחנו לא יכולים. אנחנו חייבים לספק לו לפחות את המסאג' ואפשר לראות את זה גם כאן שהמסאג' לא עטוף בסוגריים מרובעים.

  24. 08:09

    אם היינו באים ואומרים את המסאג' גם אני יכול לתת ובואו ניתן פה נניח סתם איזה דיפולט כזה. אז עכשיו אנחנו רואים שאנחנו כן יכולים לבצע קריאה כזאת.

  25. 08:22

    גם סטרינג מסאג' עטוף בסוגריים מרובעים ואפילו אומרים לנו מהו ערך ברירת מחדל. בואו נריץ את זה בצורה כזאת ונראה שיש לנו את השלושה קווים מודפסים.

  26. 08:37

    דבר מעניין שחשוב לציין בנוגע ל-Optional Parameters ושהפרמטרים האופציונליים חייבים להיות אחרונים. זאת אומרת, אתם לא יכולים ללכת איפשהו באמצע לדוגמה ולרשום פה עוד איזשהו פרמטר שהוא בעצם אין לו ערך ברירת מחדל כאשר לפניו יש מישהו עם ברירת מחדל.

  27. 09:04

    אנחנו כמובן לא יכולים לעשות את זה כאן, אנחנו לא יכולים לעשות את זה בסוף. שימו לב שגם כאן יש לנו שגיאה על הדבר הזה. השגיאה אומרת לנו optional parameters, must appear after all required parameters אם היינו שמים את הערך הדרוש הזה בהתחלה כערך ראשון או מספר ערכים כאלה כמובן לא הייתה לנו שום בעיה מבחינת בניית הפונקציה היינו כמובן צריכים לספק אותו כאשר אנחנו קוראים

  28. 09:34

    לפונקציה אז שימו לב שאלו הערכים שחייבים להופיע האחרונים אז כעת יש לנו את היכולת במקום לבצע העמסה של פונקציות אם הפונקציות הן מאוד מאוד מאוד דומות לבצע פשוט פונקציה אחת ולתת ערכי בריאת מחדל או ערכים אופציונליים מה שנקרא לפרמטרים של הפונקציה ואז לא חייבים לשלוח אותם.

  29. 09:59

    הדבר הבא שקיים לנו נקרא Named Parameters. לצורך כך אני פשוט אעתיק את כל הדוגמה הזאת ואני אעבור לדוגמה של ה-Named Parameters, נדביק, נוריד רגע את ה-Default כדי שלא בטעות נחשוב שזה קשור לדיפולט.

  30. 10:27

    יש לנו ConsoleColor זה הדיפולט, יש לנו Times שווה 1 זה הדיפולט. וכמובן כל הקריאות האלה כמובן יהיו לנו איזושהי בעיה איתן אז אני כרגע אשים אותן בהערה רק בכדי להדגים מה זה Named Parameters.

  31. 10:48

    אוקיי נריץ את זה נראה שכרגע הוא מציג לנו את זה באדום ארבע פעמים הכל עובד כמו שצריך. מה זה Named Parameters? Named Parameters אומר שאנחנו יכלנו לקרוא לפונקציה בואו נקרא פה קריאה נופפת לפרינט ולומר כזה דבר פונקציה מקבלת Message אבל אנחנו יכולים לשלוח קודם כל את ה-Color איך?

  32. 11:17

    פשוט רושמים את השם האמיתי של המשתנה שנמצא בפונקציה בשם המלא שלו נקודותיים זאת הסיבה שתמיד אתם בעצם רואים כאן את הנקודותיים כשאנחנו מתחילים לכתוב מיד אנחנו רואים את הנקודותיים האלה ולתת את הערך שאנחנו רוצים.

  33. 11:37

    בואו ניתן כאן yellow. לאחר מכן בואו ניתן לדוגמה את ה-Times אז פשוט אנחנו רושמים Times נקודותיים ונותנים את ה-Times 3 ולבסוף Message נקודותיים ונותנים את ה-Message.

  34. 11:57

    היי. נריץ ונראה שזה עובד פרפקט אפילו ששלחנו את זה בסדר שונה הכל נכנס כמו שצריך. אם ננסה להוריד את זה ולרשום פה רק שלוש, אז אנחנו רואים שהוא לא מסכים לקבל את זה, נחזיר את זה בחזרה.

  35. 12:19

    בואו ננסה לעשות קריאה נוספת, פרינט. את המסאג' כן נשלח ראשון, This is my message, ואז נחליף רק בין השתיים האחרים. ניקח פה times, נקודותיים חמש, ויש לנו פה את ה-color, נקודותיים גלו, נריץ, ונראה שזה עובד מפני שהמסאג' נמצאת בדיוק במקום שלה.

  36. 12:52

    אז יש לנו פה יכולת פשוט לקרוא לפרמטר בשם שלו עם נקודותיים ולהחליט לשלוח אותו בסדר אחר מהסדר שבו אנחנו רגילים לקרוא. איפה הדבר הזה שימושי? למה לי בעצם לשנות סדר של פרמטרים?

  37. 13:09

    אז למעשה ברוב רוב המקרים אני לא ארצה לשנות סדר של פרמטרים כי זה הסדר שהפונקציה מקבלת אז מה אכפת לי פשוט לקרוא בסדר שהיא מקבלת.

  38. 13:20

    יש פה איזשהו יתרון שאם מישהו מסתכל רק על הקריאה והוא לא מסתכל על הפונקציה כי הפונקציה נמצאת באיזשהו אזור אחר אז הוא יכול להבין אה בעצם זה הקצבה והשלוש הזה זה מספר הפעמים שאנחנו רוצים להדפיס אה אוקיי אז אני בעצם בבת אחת במבט אחד יכול לראות את השם של הפרמטר הנה פה לדוגמה אם הייתי רואה רק את זה לא הייתי יודע שארבע זה מספר הפעמים.

  39. 13:49

    במבט חטוף אחד אלא אם כן אני הולך לפונקציה ופה אני כן רואה את השם אבל בדרך כלל לא עושים את זה כמעט תמיד אתם לא תראו שזאת הסיבה היחידה שבגללה אנחנו נבצע את ה-named parameters אז איפה כן משתמשים עם זה?

  40. 14:07

    משתמשים עם זה כאשר יש לנו optional parameters שלא כל הפרמטרים הם אופציונליים או שכל הפרמטרים הם אופציונליים אבל אני רוצה חלק מהם להשאיר וחלק לשלוח.

  41. 14:23

    איך עושים את זה? אז כעת אנחנו יכולים להחזיר בחזרה את הפרמטרים הקודמים שהיו. הנה ה-Default Message, הנה ה-Default Color שהיה Gray, והנה ה-Default Times שהיה 1.

  42. 14:44

    וכעת, אם אני פשוט אריץ את זה כבר, אני יכול לראות שזה אמור לעבוד כמו שצריך, הכל בסדר, אבל בואו רגע נתחיל לקרוא לפונקציות הקודמות.

  43. 14:55

    הפונקציות הקודמות עובדות גם כן כמו שאני רואה כי לכולם יש default parameters, נריץ את זה, הכל עובד כמו שצריך.

  44. 15:06

    אוקיי, מה קורה אם אני בעצם רוצה לשלוח רק message ו-times? למה? כי צבע, אני רוצה להשאיר בצבע ה-default שלו.

  45. 15:20

    אז אם זה המצב, אז אני רוצה לבצע פה איזושהי קריאה לפרינט ולשלוח message, לטיימס אני יכול להחליף את המקום שלהם כי אפילו שהמערכת אומרת לי שצריך להכניס קולור אני יכול להתעלם מזה טיימס לדוגמה 10 ולא לשלוח את הקולור בכלל דילגתי עליו אבל בייסיקלי מה זאת אומרת דילגתי עליו לא שלחתי את ערכו

  46. 15:51

    כי ערכו יש אותו כברירת מחדל אלא אמרתי שאני רוצה לשלוח 10 ישירות לטיימס בואו נריץ נראה באפור 10 פעמים this is my message אפשרות נוספת הייתה אם המסאג' לא היה מוגדר.

  47. 16:11

    אם המסאג' לא מוגדר, אני בעסיקלי חייב לשלוח אותו. פה כמובן כבר הולכת להיות לנו איזושהי בעיה. בואו כן נחזיר את המסאג' כדי לראות משהו קצת יותר אמיתי שמשתמשים איתו בתעשייה.

  48. 16:30

    בואו נניח שהייתי רוצה להשאיר את המסאג' כמו שהוא, והייתי רוצה לדלג מעל דברים אחרים. נניח בואו נעשה כזה דבר. נשלח אך ורק את הקולור.

  49. 16:46

    איך אנחנו שולחים אך ורק את הקולור? הרי המסאג' אומר לנו תביא לנו בבקשה את הערך. אוקיי, אני לא רוצה, אין בעיה, יש לו דיפולט. אז אני פונה לקולור בנקודותיים ופונה לתורקיז.

  50. 17:03

    אחד נשאר דיפולט, מסאג' נשאר דיפולט, אני מריץ ואני רואה שיש לי פה בסוף את השלושה קווים the turkeys. זאת אומרת יש לנו יכולת עכשיו לדלג מעל פרמטרים על ידי הקונספט של הניימד פרמטר ולהגיד בדיוק את מי אנחנו שולחים לאן.

  51. 17:25

    הכלי הבא זאת המילה השמורה דיינמיק. דיינמיק, אני רואה שהניימספייס שלי מוגדר כדיינמיק. בואו נשנה לו את השם ל-NS ופשוט נוכל לפיכך להשתמש במילה דיינמיק.

  52. 17:48

    דיינמיק זה בעצם טיפוס נתונים מאוד מיוחד. אנחנו יכולים לפתוח איתו משתנה מיי אובג'קט וכמובן אנחנו יכולים להכניס אליו איזה שהוא ערך אני כרגע לצורך הדוגמה אצור כאן קלאס פרודקט יש לי פה מחלקה פרודקט אין בה שום דבר אז

לקורס המלא: קורס תכנות מתקדם ב‑#C ודוט-נט

ההרצאה הקודמת: תרגילים על LINQ

ההרצאה הבאה: תרגילים על חידושים ב-C# ver 4

הרצאות קשורות מקורסים אחרים

  • חידושים בשרת Hyper-V

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס WCF - תקשורת למתקדמים בדוט-נט