PracticU

חידושים ב-C# ver 3 - חלק 1

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

חידושים ב-C# ver 3 - חלק 1
השיעור פותח את החידושים של C# 3, שהופיעו בשנת 2008. נתחיל ממאפייני מחלקה שמוגדרים בצורה מקוצרת, ממתחם של אתחול אובייקטים ואוספים, ומהמילה var.
Auto-implemented property
1. הבעיה: מאפיין שחושף שדה פרטי בלי בדיקה דורש כמה שורות קוד. בדוגמה של first name ו-last name כל אחד דרש 12 שורות.
2. הפתרון: כותבים רק את שם המאפיין עם get; set;. הקומפיילר יוצר את השדה הפרטי בעצמו, ואין לנו גישה אליו בשם.
3. מתי לא: כשיש בדיקה בתוך ה-set, כמו בדוגמה של גיל שחייב להיות חיובי, חייבים לכתוב את השדה ואת המאפיין בעצמנו.
4. קריאה בלבד: אפשר לשים private set כדי שהמאפיין יהיה ניתן לקריאה בלבד מבחוץ, או לכתוב רק get ולאתחל אותו בבנאי.
5. שדות ציבוריים: השיטה המקובלת היא לחשוף מאפיינים ולא שדות, ורכיבים רבים כמו רשתות תצוגה מתעלמים משדות ציבוריים.
Object initializer
6. הרעיון: אחרי new מסוגריים מסולסלים כותבים את שמות המאפיינים והערכים שלהם, בלי בנאי שמקבל את כל הפרמטרים.
7. אפשר לשלב: אפשר לקרוא לבנאי מסוים ואחריו לאתחל מאפיינים נוספים.
8. מה הקומפיילר עושה: יוצר אובייקט בעזרת הבנאי הריק ואז נותן ערך לכל מאפיין.
Collection initializer
9. מערך: int[] arr = {1, 2, 3} היה קיים מכבר. C# 3 מאפשר את אותו תחביר לכל אוסף, כמו List, בתנאי שיש לו מתודה בשם Add.
10. דוגמה: יצירת רשימה של אובייקטי Book עם אתחול בתוך הסוגריים המסולסלים, ואז לולאה שמציגה את הספרים.
var
11. הגדרה: משתנה שמוגדר בעזרת var מקבל את הטיפוס מתוך הערך שמאתחל אותו. חייבים לאתחל אותו מיד, ומותר להשתמש בו רק כמשתנה לוקאלי בתוך פונקציה.
12. זהירות: כשהטיפוס לא ברור מיד, הקוד קשה לקריאה. לכן מומלץ לכתוב טיפוס מפורש, ולהשתמש ב-var רק כשאין ברירה, למשל עם טיפוסים אנונימיים.
השיעור הבא מציג את הטיפוס האנונימי ואת שאר החידושים.
השיעור הבא בקורס: חידושים ב-C# ver 3 - חלק 2

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

  1. 00:00

    רשימת החידושים ב-C# 3

  2. 01:36

    בניית מחלקת Person עם Properties

  3. 04:43

    הקונספט של DATA MEMBER פרטי

  4. 08:49

    מהו AUTO IMPLEMENTED PROPERTY

  5. 09:45

    קיצור PROP ליצירת Property

  6. 11:45

    Property מחושב ללא DATA MEMBER

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

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

  1. 00:04

    אנחנו מגיעים לחידושים שהתווספו ב-C-Sharp 3. כאן אנחנו הולכים לראות רשימה של חידושים שהתווספו ב-C-Sharp 3 ב-2008 ואחרי שנראה את הרשימה נלך ונעשה דוגמה מהירה לכל אחד מהם.

  2. 00:20

    אז הדבר הראשון שהתווסף נקרא Auto Implemented Property. כאן אנחנו יכולים בעזרת תחביר מקוצר ליצור איזשהו Data Member ואיזשהו Property שחושף אותו.

  3. 00:32

    לאחר מכן יתווסף Object Initializer ו-Collection Initializer. פה אנחנו יכולים להתחיל אובייקט או להתחיל קולקשן בצורה מקוצרת.

  4. 00:43

    התווספה המילה השמורה var, התווסף הקונספט של אנונימוס טייפ, איזשהו טיפוס ללא שם שאנחנו יכולים להשתמש איתו, התווסף הקונספט של extension method, איזושהי פונקציה שאנחנו יכולים להוסיף למחלקה קיימת בלי שיש לנו בעצם את הקוד של המחלקה הקיימת, התווסף partial method,

  5. 01:10

    איזושהי מתודה שמוגדרת כפרשל בתוך מחלקה פרשל, הקונספט של Lambda Expression, איזשהו תחביר מקוצר לאנונימוס מתוד והתווסף לינק Language Integrated Query.

  6. 01:27

    אז אנחנו הולכים לראות בסרטון הזה דוגמה לגבי כל אחד מהיכולות האלה חוץ מלינק, שלינק אנחנו נראה בסרטון נפרד בהרחבה. אז בואו נצלול לדוגמאות ונראה מה זה כל חידוש שהתווסף ב-C-Sharp 3. אז אז אנחנו מתחילים עם מה זה auto-implemented property.

  7. 01:49

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

  8. 02:20

    אנחנו רוצים לחסום אותו להגדיר אותו כפרייבט ולבנות עבורו איזשהו פרופרטי שחושף אותו שימו לב ש first name ו last name כמובן יכולים לקבל כל ערך מבחינתנו ולכן הם יכולים להיות public יש לנו את הקיצור prop pool שאנחנו יכולים להשתמש בו בכדי לבנות במהירות גם את הדאטה ממבר וגם את הפרופרטי ואז אנחנו יכולים בואו טיפה נשים

  9. 02:50

    פה קודק קצת יותר יפה אנחנו יכולים באזור הסט לבצע איזושהי בדיקה אם ה-value שמנסים להכניס גדול מ-0, רק אז אנחנו מאשרים לו להיכנס ל-data member h.

  10. 03:05

    אוקיי, אז יש לנו כאן את הקונספט של person עם שני data members שהם public, data member אחד שהוא private, זה ה-underline h, ו-property. אז מה זה auto-implemented property?

  11. 03:20

    קודם כל, בואו נשים כאן את המחלקה הזאת בצד, ונסתכל שאנחנו יכולים לבנות ממנה Object ואנחנו רואים שאנחנו ניגשים ל-First Name, אנחנו ניגשים ל-Last Name, כמובן הם Public והנה ה-Age שהוא Property עם A גדולה.

  12. 03:40

    אנחנו יכולים לזהות לפי האייקונים מה זה Data Member ומה זה Property. עכשיו הנקודה היא כזאת, למה הגדרנו Age בצורה כזאת עם Private ו-Public?

  13. 03:54

    אז כמובן הסיבה שעשינו את זה זה בגלל שאנחנו לא רוצים לאפשר להכניס ערכים שגויים לתוך ה-age אז חסמנו אותו, עשינו פה איזשהו data member private וproperty שהוא public בשביל לחשוף אותו החוצה בעזרת ה-get וכשאנחנו רוצים להכניס אליו ערך הערך עובר בדיקה באזור של ה-set.

  14. 04:15

    בסדר זה הגיוני אבל למה הגדרנו את ה-first name ואת ה-last name כ-public? אז התשובה כמובן בגלל שאנחנו לא רוצים לבצע שום בדיקה וכל ערך שלא תביאו לי מבחינתי זה נכון גם אם תביאו לי ABC מבחינתי זה בסדר גם אם תביאו לי את המחרוזת 8 זה בסדר אני לא רוצה לבצע שום בדיקה יש המון data members כאלה שאין לנו בדיקה לגביהם

  15. 04:42

    אז ישנו קונספט תכנותי שאומר שגם אם יש לכם data member שאין לו בדיקה הוא לא צריך להיות public אלא צריך להיות private עם property שחושף אותו ללא בדיקה זאת אומרת הקונספט אומר אנחנו אף פעם לא בונים data members publicים אלא רק properties publicים.

  16. 05:10

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

  17. 05:22

    ישנה סיבה אחת שהיא קצת יותר טכנית והסיבה מדברת על מצב שבו אתם בונים מחלקה ואתם נותנים אובייקט מהמחלקה שלכם לאיזשהו רכיב תצוגתי אוטומטי שקיים. לדוגמה, בעולם ה-Web ב-asp.net קיים איזשהו רכיב שנקרא GridView.

  18. 05:48

    אם אתם נותנים ל-GridView להציג אובייקט פרסון או קולקשן של פרסונס, אז ה-GridView יציג לכם אך ורק את ה-Properties ולא את ה-Data Members, אפילו שה-Data Members הם פאבליקים.

  19. 06:04

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

  20. 06:15

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

  21. 06:42

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

  22. 07:07

    בואו נעשה פה set, ופשוט אין לנו שום בדיקה. first name שווה לvalue. בואו נעשה את אותו הדבר על ה-Last Name. יש לנו פה פרופרטי נוסף עבור ה-Last Name שחושף את ה-Data Member ה-Private Last Name.

  23. 07:33

    ושימו לב שאין לנו פה שום בדיקות כי זו ההחלטה שהחלטנו לגבי ה-Data Member הזה או ה-Property הזה.

  24. 07:43

    אז כאן אנחנו רואים שיטה אחרת או גישה אחרת לבניית מחלקה ב-Object Oriented שאומרת למרות שאין לנו פה שום בדיקה מבחינת מידע תקין או מידע חוקי עדיין יהיה לנו data member שהוא private ואנחנו נחשוף אותו על ידי property ופשוט לא תהיה שום בדיקה בפרופרטי.

  25. 08:04

    ככה אם אנחנו לוקחים אובייקטים person ונותנים אותם לדאטה גריד סליחה לגריד view של fp.net בוא תציג לי אותם אז הוא יגיד לכם בטח יש לכם פה property first name אני אציג לכם את הפרופרטי את הערך שלו יש לכם property last name אין שום בעיה אני אציג לכם אותו כי אני מתייחס רק לפרופרטיז והדאטה ממברס האלה שמורים מבחינתנו אף אחד לא אמור לדעת שהם קיימים אז זה בעצם

  26. 08:30

    תכנות קצת יותר אלגנטי שאומר דאטה ממברס שלכם הם רק פרייבטים והפרופרטי חושפים אותם או שקיימים פרופרטיז שחושפים אותם אם אנחנו עכשיו נלחץ p נקודה אנחנו נראה שיש לנו רק פרופרטיז שנחשפים החוצה אתם יכולים לראות את הקונספט הזה המון בדוט נט הרכיבים של התשתית של .NET כמעט אף פעם לא חושפים לכם החוצה את ה-data members אלא רק

  27. 08:57

    properties אפילו שאין שום בדיקה שמתבצעת. אז מה זה auto-implemented property? בואו נחזור ונסתכל רגע על הקוד של first name. בשביל לבנות את first name שימו לב כמה שורות קוד כתבנו.

  28. 09:19

    כתבנו פה שורת קוד אחת שיוצרת לנו את ה-property, סליחה את ה-data member. לאחר מכן 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 עוד 11 שורות קוד שיוצרות לנו את הפרופרטי שחושף אותו כאשר אין שום בדיקה.

  29. 09:34

    זאת אומרת 12 שורות קוד רק על הקונספט התכנותי הזה, על ה-first name, עוד 12 שורות קוד על ה-last name.

  30. 09:42

    ב-age לא הייתה לנו ברירה, היינו חייבים לעשות את זה כי אנחנו כן רוצים לבצע בדיקה. Auto Implemented Property אומר במקום לעשות את כל הקודים האלה בעצמכם בואו תרשמו prop ותבנו את הproperty בצורה הבאה רק שורה אחת ויחידה והשורה האחת והיחידה הזאת מחליפה את עצמה ל-12

  31. 10:15

    שורות קוד האלה מה שאנחנו רואים פה זה את השם של הproperty בלבד אנחנו לא רואים את השם של הdata member שהולך להיווצר לנו אוטומטית אנחנו לא יודעים מה השם של הדאטה ממבר הזה, הוא לא אמור להיות underline first name, אבל הולך להיות לנו במחלקה איזשהו דאטה ממבר פרייבט שאף אחד לא יודע על קיומו ואף אחד לא יודע איך קוראים לו,

  32. 10:43

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

  33. 10:58

    יש לנו פה סך הכל get נקודה פסיק, set נקודה פסיק, אנחנו לא יכולים להוסיף שום בדיקה ל-set. בואו נעשה את אותו הדבר עבור ה-last name, במקום ה-12 שורות קוד האלה, נשים אותם בהערה, נבצע את אותו הקוד, נעשה פה איזשהו copy-paste, וממש בקוד מקוצר הצלחנו לבנות גם data member,

  34. 11:28

    גם property שחושף אותו, ורק אין לנו פה שום יכולת להוסיף בדיקה. ב-age אם אני רוצה להוסיף בדיקה אז אין לי ברירה, אני פשוט חייב לכתוב את ה-data member בעצמי ואת ה-property בעצמי ולכתוב את הבדיקה שאני רוצה בתוך אזור ה-set.

  35. 11:49

    אם הייתי רוצה לדוגמה להוסיף עוד פרופרטי שמחזיר לדוגמה את ה-full name, הרי אין צורך בעוד data member שיחזיק לי את ה-full name, אז גם הייתי חייב לכתוב את זה בעצמי מפני שיש לנו קוד, ברגע שאנחנו צריכים לכתוב קוד בתוך ה-get או בתוך ה-set, אנחנו נאלצים לכתוב את זה בעצמנו בואו נבנה פה פרופרטי שנקרא סטרינג פול ניים פול ניים כמובן הוא יהיה

  36. 12:14

    רק read only אז יהיה לי פה רק get ואני מחזיר את הפרסט ניים אני יכול לגשת כמובן רק לפרופרטי פרסט ניים לא לדאטה ממבר הפרייבט שאני אפילו לא יודע איך קוראים לו last name והנה יש לנו פה פרופרטי שמחזיר קוד on the fly לא צריך דאטה ממבר בשבילו

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

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

ההרצאה הבאה: חידושים ב-C# ver 3 - חלק 2

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

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

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

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