
struct כדרך נוספת להגדיר ישות, ומסביר מה ההבדל בינה לבין class. הדוגמה היא ישות לייצוג שעה, דקה ושנייה.struct.public חייבים להתאתחל בתוך הקונסטרקטור, ולא בשורת ההגדרה כפי שאפשר ב-class.struct לא יכול לרשת ממחלקה או מ-struct אחר, וגם מחלקה לא יכולה לרשת ממנו. הוא לא משתתף בעץ הורשה.struct בנוי אחרת בזיכרון, ולכן נוצר מהר יותר כשיוצרים הרבה ישויות קטנות.struct מתאים לישויות כמו זמן, תאריך, נקודה או קואורדינטה, שעוזרות לבנות את הישויות המרכזיות.struct מיועד לישויות עד 64 בתים.class, גם אם יש רק אחד מהם, כי הם הישויות שעובדים איתן בתוכנית ואלה שיכולות לעבור הורשה.struct הוא חלק מהתכנות מונחה העצמים, כי הוא יוצר ישויות, אלא שהוא לא מתאים לעץ הורשה. כעת אפשר לבחור בין struct ל-class לפי גודל הישות ותפקידה בתוכנית.הטקסט המלא של הדקות הראשונות בהרצאה «מבנה - struct» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו עוברים לשיטה נוספת להגדיר ישות אבל לא על ידי המילה קלאס אלא על ידי מילה שנקראת סטראקט. כאן אנחנו הולכים לראות מה זה בדיוק סטראקט ומה ההבדל בין קלאס לבין סטראקט והאם באמת סטראקט קשור לעולם האובג'קט אוריינטד.
אז בוא נניח שאנחנו מתעסקים עם איזשהו פרויקט שמתעסק הרבה עם זמנים ואנחנו רוצים להציג זמן או שעה דקה שנייה בהרבה מקומות בתוכנית.
לכן כדאי שניצור איזושהי ישות מסוימת שמתארת זמן. עכשיו ברור שיש לנו את הישות דייט טיים שאנחנו כבר מכירים אבל בואו נניח שלצורך התוכנית שלנו היא לא מתאימה כי היא כוללת גם שעה וגם תאריך ואנחנו רוצים להתעסק רק עם זמנים בלי תאריכים.
אז בואו נלך וניצור לעצמנו איזושהי קלאס רגילה לגמרי ונקרא לה time ובואו נעשה את זה סימפל יש לנו פה public int int hour יש לנו public int minute ויש לנו public int second נבנה איזשהו קונסטרקטור שמקבל את כל הערכים string int hour minute בעצם זה אמור להיות integer power minute וsecond נהתחל אותם minute שווה minute
second שווה second ובואו נעשה איזושהי פונקציית הדפסה שמאפשרת לראות את הזמן בפורמט של שעון. ויש לנו פה הצגה ראשונה, הצגה שנייה והצגה שלישית של הדקות.
ושימו לב שכשאנחנו מציגים את זה, אז יש לנו אפשרות להציג משהו שנקרא אפסים מקדימים, לידינג זירוז. אם אנחנו מציגים D2 ולדוגמה ה-Hour הוא מספר חד-ספרתי לדוגמה 8, אז מה שיוצג פה זה יהיה 0.8 אם ה-Hour הוא דו-ספרתי לדוגמה 12 אז יוצג פה 12 ויש לנו פה פורמט של שעון וכל מה שאנחנו רוצים לעשות זה לבדוק
את הקוד הזה דרך המיין אז בואו נציג את זה בוורטיקל טאב ניגש למיין וניצור אובייקט time time t1 שווה new time אנחנו רואים שהקונסטרקטור אומר לנו תביאו את השעה, יש לנו פה 8 בבוקר, 50 דקות ו-17 שניות, t1.print בואו נריץ ונראה שהכל עובד כמו שצריך.
אנחנו בנינו את זה על ידי קלאס, עכשיו כל מה שאני רוצה לעשות זה פשוט מאוד להחליף את המילה קלאס במילה אסטרקט, יש לנו אפשרות לעשות את זה ובואו נריץ ושימו לב שקיבלנו את אותו הדבר, נראה כאילו שיכלנו ליצור את הישות הזאת או כל ישות אחרת גם בעזרת קלאס וגם בעזרת סטראקט.
קצת לא הגיוני שיש שתי מילים שמורות שמבצעות את אותו הדבר. כל מה שעשיתי זה החלפתי ביניהם וזה עובד פרפקט. אז למעשה יש כמה הבדלים בין קלאס לבין סטראקט.
אז בואו נסתכל. דבר ראשון, ישנם מספר הבדלים טכניים. אם אני מנסה להגדיר קונסטרקטור ריק, אני רואה שהמערכת לא מאשרת לי. זה הבדל טכני מאוד פשוט, יש לזה איזו סיבה שקשורה לפעילות הפנימית של .NET של המערכת.
אסור לנו להגדיר קונסטרקטור ריק בתוך סטראקט. אוקיי. דבר הבא, אם לדוגמה אנחנו רוצים להגדיר את המשתנה הזה כמשתנה פרייבט ולהגדיר לו נניח איזשהו פרופרטי שחושף אותו החוצה.
הגיוני שנעשה דבר כזה מפני שיכול להיות מידע שגוי בתוך שעה, גם בתוך דקה וגם בתוך שנייה. אז אנחנו יכולים להגדיר את זה כ-private, נשנה לו את השם, בואו נניח שיהיה underline hour, underline minute ו-underline second וכעת נבצע properties.
יש לנו hour, בבדיקה אנחנו בודקים האם ה-value חוקי, חוקי מבחינת שעה זה גדול שווה ל-0 וכן קטן שווה מ-23. אם הכל בסדר אנחנו רוצים לבצע את ההשמה לתוך ה-Hour ובואו נשכפל את ה-Hour הזה גם ל-Minate כאשר החוקיות ב-Minate זה בין 0 ל-59 ונשכפל את ה-Minate גם ל-Second.
כעת יש לנו את הקונסטרקטור השני ואנחנו לא רוצים להכניס את הערכים לתוך המשתנים של ה-Data Members אלא לתוך ה-Properties. אוקיי, נריץ קומפילציה ונראה שפתאום קיימת לנו שגיאה נוספת והשגיאה דבר נוספת היא שאם אנחנו משתמשים בדאטה ממברס
שהם לא פאבליק אנחנו פה רואים את הפרייבט אז כאשר יש לנו קונסטרקטור אנחנו חייבים לבצע אתחול של הדאטה ממברס האלה בקונסטרקטור אנחנו אפילו לא יכולים לבצע את הדבר הזה כפי שמותר לבצע בקלאס בינתיים אנחנו רואים פה רק הגבלות על הגבלות אבל תכף אנחנו נראה את ההבדלים האמיתיים זאת אומרת שמה שאנחנו צריכים לעשות פה זה
hour שווה minute שווה second שווה 0. נבצע קומפילציה ונראה שעכשיו הכל בסדר. בואו נריץ. קיבלנו את אותו הדבר. טוב, אז בינתיים מה שראינו זה שstruct מאפשר לנו לבנות ישות בדומה לקלאס אבל עם כמה הגבלות אסור לנו קונסטרקט או רק אסור לנו לבצע אתחול בשורת ההגדרה
אנחנו חייבים להתחיל את המשתנים לפני שהקונסטרקטור מסתיים, כל מיני דברים קצת לא ברורים. אז בואו נסתכל בעצם על כמה הבדלים שקיימים בין סטראקט לבין קלאס ולמה באמת סטראקט נועד.