PracticU

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

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

חידושים ב-C# ver 2
השיעור עוסק בתוספות ש-C# 2 הביאה בשנת 2005. חלק מהנושאים מוכרים מסרטונים קודמים, ולכן הם מוצגים כתזכורת קצרה עם דוגמה לכל אחד מהם. אם עובדים עם פרויקט בגרסת פריימוורק ישנה יותר, התוספות האלה לא זמינות.
מחלקה סטטית
1. הגדרה: מחלקה שמכילה רק חברים סטטיים, ואי אפשר ליצור ממנה אובייקט. דוגמה: מחלקה שמכילה שיטות לסכום וממוצע של מערך.
2. למה לא מחלקה רגילה: אין לה מידע פנימי לשמור, ולכן אין צורך ביצירת אובייקט. הגדרה סטטית מונעת יצירה בטעות.
מחלקה חלקית (Partial)
3. הגדרה: מחלקה אחת שנפרשת על כמה קבצי קוד, וכל חלק מסומן כ-partial. הקומפיילר מאחד את כל החלקים למחלקה אחת.
4. שימוש: Visual Studio משתמשת בזה כדי ליצור קוד סינתטי של טופס, כך שהקוד שהמתכנת כותב נשאר בקובץ נפרד.
פונקציה אנונימית
5. דלגייט: פונקציה אנונימית חייבת להיכנס לתוך אובייקט דלגייט. מגדירים דלגייט בעל חתימה מסוימת, למשל כזה שמקבל שני מספרים ומחזיר מספר.
6. הכתיבה: במקום להגדיר פונקציה נפרדת כותבים את הגוף בתוך ההשמה, עם המילה delegate ואחריה הפרמטרים.
7. יתרון: מתאים לפונקציות קצרות שמשתמשים בהן במקום אחד, והקוד נשאר במקום אחד ולא מפוזר.
ג'נריקס
8. הרעיון: מחלקה שמקבלת טיפוס כפרמטר, למשל MyMessage של T. כשיוצרים אובייקט מציינים את הטיפוס, למשל int או DateTime.
9. יתרון: אין צורך בבוקסינג ובקאסטינג, והקומפיילר בודק את הטיפוס בזמן הקומפילציה.
Nullable
10. הבעיה: מסד נתונים יכול להחזיר ערך ריק לעמודה מסוג מספר, ו-int לא יכול להכיל null.
11. הפתרון: Nullable<T>, שמסומן גם בסימן שאלה אחרי הטיפוס, למשל int?. בודקים HasValue ומקבלים את הערך עם Value, או משתמשים ב-GetValueOrDefault כדי לקבל ברירת מחדל.
yield
12. הרעיון: פונקציה שמחזירה IEnumerable לא צריכה לבנות רשימה ולהחזיר אותה. במקום זה כותבים yield return לכל ערך, והמערכת בונה את האוסף בעצמה.
השיעור מדגיש שההבדל בין שפה עתיקה לשפה חדשה נמצא בעיקר בכמה כלים שחוסכים קוד חוזר.
השיעור הבא בקורס: תרגילים על חידושים ב-C# ver 2

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

  1. 00:00

    סקירת התוספות של C# 2

  2. 00:59

    מחלקה סטטית - Array Services

  3. 04:47

    הגדרת מחלקה כ-Static

  4. 05:56

    מחלקה Partial על פני מספר קבצים

  5. 08:55

    קוד סינטטי של Windows Forms Designer

  6. 12:33

    Anonymous Method ו-Delegate

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

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

  1. 00:02

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

  2. 00:20

    כזכור ב-2005? כי יכול להיות שאתם עובדים עם איזושהי תוכנה ישנה של איזשהו ארגון שעובדים בפריימוורק 1.0 או פריימוורק 1.1, יחסית זה נדיר, אבל זה יכול להיות.

  3. 00:33

    C-Sharp לא C-Sharp 2 אז תדעו שהיכולות האלה לא קיימות לכם רק מ-C-Sharp 2 והלאה אנחנו יכולים להשתמש בהם. אז מה שהתווסף ב-C-Sharp 2 זאת מחלקה סטטית, מחלקה שהיא פרשל, אנונימוס מתוד כלומר פונקציה אנונימית, כל הקונספט של ה-Generics, כל הקונספט של ה-Nullable Types והמילה השמורה Yield.

  4. 01:06

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

  5. 01:31

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

  6. 02:09

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

  7. 02:52

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

  8. 03:15

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

  9. 03:33

    כסטטית. הנה פונקציה ראשונה סטטית, הנה פונקציה שנייה סטטית, ועכשיו בכדי להשתמש בפונקציות אנחנו יכולים לבוא ולקרוא ל-aray Services נקודה in הפונקציית getSum, in הפונקציית getAverage, אין בעיה שנפתח פה איזשהו מערך ויש לנו בו כל מיני ערכים ואנחנו רוצים להציג את הסכום שלו ואנחנו רוצים להציג את הממוצע שלו.

  10. 04:32

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

  11. 04:51

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

  12. 05:08

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

  13. 05:23

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

  14. 05:41

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

  15. 05:53

    הדבר הזה התווסף ב-2005 C-Sharp 2, היכולת הזאת, המילה סטטית על קלאס. הדבר הבא שהתווסף, שאנחנו הולכים לראות דוגמה מהירה שלו, זה הקונספט של פרשל.

  16. 06:07

    פה אנחנו יכולים לבנות מחלקה שפזורה על פני מספר קבצי C-Sharp. בואו ניקח כאן איזשהו דמו, ניקח כאן מחלקה טסט, ויש לנו בטסט public int ניקח value והדבר הזה נמצא באיזשהו קובץ test1.csharp אנחנו יכולים לבנות קובץ csharp אחר לגמרי נקרא לו test2 ועדיין בואו להמשיך ולכתוב את המחלקה test ובואו נכתוב פה

  17. 06:54

    print ונטיס את ערך הvalue נשים אותם רגע side by side נשים פה vertical וvertical בשביל להצליח לעשות את הדבר הזה אז אנחנו צריכים כל מחלקה להגדיר כפרשל.

  18. 07:15

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

  19. 07:33

    מבחינת הקומפיילר, הקומפיילר רואה מחלקה כפרשל אז הוא יודע שיכול להיות קובץ c-sharp אחר שיש בו את המשך המחלקה הזאת.

  20. 07:44

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

  21. 08:02

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

  22. 08:28

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

  23. 08:41

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

  24. 08:58

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

  25. 09:25

    אנחנו כותבים את הקוד שלנו. בואו ניקח פה project windows forms application ונפתח אותו, נראה שיש לנו פה איזשהו טופס.

  26. 09:37

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

  27. 09:55

    ונבצע label1.text שווה לואו. נריץ, נראה שהכל עובד כמו שצריך. אני לוחץ על הלחצן, אני רואה לואו על הלייבל, סבבה.

  28. 10:11

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

  29. 10:30

    אז מה שקורה, יש לנו כאן עוד קובץ C-Sharp, form1.designer, אנחנו יכולים להיכנס אליו, ולראות שבקוד הזה יש המון המון פקודות שיוצרות לנו את כל הרכיבים.

  30. 10:46

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

  31. 11:02

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

  32. 11:20

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

  33. 11:45

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

  34. 12:04

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

  35. 12:30

    הדבר הבא שהתווסף ב-C-Sharp 2 נקרא Anonymous Method וזאת פשוט מאוד פונקציה אנונימית. פונקציה אנונימית זאת פונקציה ללא שם, אין לה שם.

  36. 12:44

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

  37. 12:58

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

  38. 13:08

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

  39. 13:39

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

  40. 14:03

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

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

ההרצאה הקודמת: תרגילים על Dot Net Basic Terms

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

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

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

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

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