
new { ... } מגדירים את הערכים, למשל יצרן, דגם ומחיר של מכונית.this לפני הפרמטר הראשון. כך היא נראית כמתודה של string.partial בתוך מחלקה partial. החלק הראשון קורא לה, והחלק השני ממש אותה.(a, b) => a + b.הטקסט המלא של הדקות הראשונות בהרצאה «חידושים ב-C# ver 3 - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנונימוס טייפ זה בעצם כלי שמאפשר לנו לבנות משתנה, קודם כל, בואו ניקח כאן משתנה my car, ולהכניס אליו איזשהו אובייקט מטיפוס שלא קיים, ואנחנו בונים את הטיפוס הזה ממש כרגע בפקודה הזאת.
זה אומר שאנחנו צריכים להשתמש במילה new, סוגריים מסוסלים, ובדיוק פה להגדיר מהם המשתנים, הפרופרטיז של אותו משתנה. אובייקט, אין לנו שום יכולת להוסיף, הפונקציות רק משתנים.
אז יש לנו פה car ויש לה manufacturer, למבורגיני, בואו ניקח את המודל ובואו ניקח את ה-price. כן, לקחתי פה איזשהו דגם של מכונית שיש לי פה בגראז'.
השאלה היא מה ה-sug שאנחנו צריכים להגדיר עבור האובייקט mycar. קודם כל, בואו נסתכל, יש לנו פה השמה. בחלק הימני יצרנו גם טיפוס נתונים חדש וגם אובייקט מהטיפוס הזה.
בחלק השמאלי יש לנו רפרנס שאליו אנחנו מכניסים את האובייקט. אז כמובן אנחנו צריכים להגדיר את הטיפוס שלו, אבל הטיפוס אין לו שם.
לכן או שאנחנו משתמשים באובייקט בכדי להכיל כל דבר, הרי אובייקט מסוגל להכיל כל דבר. מה הבעיה עם אובייקט? אין לנו פה שום גישה לדאטה ממברס או לפרופרטיז ואנחנו גם לא יכולים לעשות קאסטינג מפני שאין שם לטיפוס הזה, הטיפוס הזה הוא אנונימי לחלוטין.
אז האפשרות היחידה שלנו בכדי שנוכל לגשת לדאטה ממברס היא var. זה מקרה שבו אין לנו ברירה אלא להשתמש ב-var.
אם אנחנו עכשיו באים למה העיקר, אנחנו רואים שיש לנו יצרן, דגם, מחיר, הכל עובד פרפקט ואנחנו יכולים לגשת ולהדפיס את mycar.manufacturer אנחנו יכולים להדפיס את mycar model mycar price נריץ נראה שהכל עובד כמו שצריך ואמור להיות מודל נריץ נראה שהכל עובד כמו שצריך ואנחנו יכולים גם לגשת ולהציג את הטוסטרינג
שלו. טיפוס אנונימי אוטומטית מגיע עם פונקציה two-string שנראית בצורה כזאת. פשוט שרשור של כל המשתנים אחד ליד השני עם פסיקים בתוך סוגריים סוצלות.
למה לנו לעשות דבר כזה בכלל? אנחנו נראה כאשר אנחנו נשתמש בקונספט של לינק של language integrated query שמה יש שימוש מאוד מעניין עם טיפוס אנונימי אבל כרגע יש לנו את היכולת פשוט להגדיר את זה.
כמה דברים לגבי טיפוס אנונימי. קודם כל, טיפוס אנונימי הוא read-only. אם אנחנו באים עכשיו ואומרים בואו נחליף את ה-price ל-450,000 אנחנו רואים שיש לנו פה איזושהי שגיאת קומפילציה נסתכל עליה ונראה ש-price זה read-only property price cannot be assigned to it is read-only.
דבר ראשון, זה לא מיועד בשביל שנשנה את הערכים של האובייקט שיצרנו. דבר שני, אנחנו יכולים לבצע את הדבר הבא. בואו נניח שיש לנו כאן איזשהו double price שווה 500,000.
היינו יכולים פשוט לשים פה את המילה price. נקרא לזה the price. בכדי שתראו שזו אותה המילה שמוגדרת פה, אנחנו יכולים פשוט לשים אותה. אז ברגע שעשינו את הדבר הזה אנחנו רואים שיש לנו כאן את אותו שם של משתנה, זאת אומרת לא היינו חייבים לרשום שם מומצא שווה ערך, שם מומצא שווה ערך, אלא היינו פשוט יכולים לקחת שם של משתנה שקיים
לנו עם איזשהו ערך בתוכו ופשוט לזרוק פה את שם המשתנה. זה היה אוטומטית מגדיר את השם הזה כאחד מהפרופרטיז של האובייקט שלנו.
זה גם כן משהו שהוא מאוד נפוץ ולפעמים משתמשים איתו. אני אוריד רק את ה-deprice רק בשביל שתראו שזה ממש אותו הדבר, לא יודע למה הוא מתחרפן לי פה. בואו נחזיר את המילה price בצורה כזאת.
אז אלה שני דברים שחשוב לציין בנוגע לטיפוס אנונימי, חוץ מזה הוא מאוד מאוד פשוט. אם היינו עכשיו הולכים ומייצרים עוד מכונית, מייקאר 2, כמובן עם ערכים אחרים, זה פרארי, פיידר והפרייס שלה שווה, בוא נניח אפילו ניגש ונגדיר פרייס שווה 300,000, אז המערכת לא הייתה הולכת ומייצרת עוד טיפוס מפני שהטיפוס כבר קיים ככזה שיש לו סטרינג,
סטרינג ודאבל. זה למעשה אמור להיות דאבל בכדי שזה יהיה אותו הדבר. אם אותם משתנים בדיוק מניפקטורר, מודל ופרייס.
זאת הסיבה שהמערכת לא תיצור עוד טיפוס, אבל זה לא משהו שאמור לעניין אותנו. יש לנו פה טיפוס אנונימי, יצרנו ממנו משתנה, הכל בסדר. אם אנחנו עכשיו נרצה לראות מה השם של הטיפוס, השם האמיתי שיש לו, אנחנו יכולים פשוט להציג לדוגמה את mycar.gettype.full.data.
ונראה שם מאוד מאוד מוזר, שימו לב איזה שם יש לנו. סוגריים, משולשים, f, underline, underline, אנונימוס, טייפ, 0, גרש, 3 וכו' וכו' וכו' וכו'. זה שם שהמערכת נתנה לטיפוס, אנחנו כמובן לא יכולים בכלל להשתמש עם השם הזה, מבחינתנו השם הזה לא בשימוש, אנחנו יודעים שהטיפוס הזה הוא טיפוס אנונימי,
אין לו שם, מיד נוצר משתנה, נכנס לתוך המשתנה של הוואר שלנו ואנחנו משתמשים רק עם המשתנה בלי קשר לשם של הטיפוס.
הכלי הבא שהתווסף נקרא extension method. בואו נראה מה זה extension method. בואו נניח שאנחנו רוצים לכתוב את הקוד הבא. יש לי פה סטרינג str=console.readline ואני בא ואומר למשתמש Enter a string, טקסט, המשתמש לא אמור לדעת מה זה סטרינג.
עכשיו, מה שאני רוצה לעשות, אני רוצה להציג רק את עשרת התווים הראשונים, כלומר, השמאליים, של המחוזת שהמשתמש הכניס. אז מה הבעיה? בואו נלך ונרשום str, אנחנו רוצים לקחת left, אין לי פה פונקציה שנקראת left, אבל מעניין, יש הרבה שפות לדוגמה בשפת sql או יש כל מיני שפות אחרות שיש שם פונקציה שנקראת left והפונקציה אומרת תביא לי כמה תווים אתה רוצה
ואני אחזיר לך את המחרוזת עם התווים. כלומר מחרוזת עם עשרת התווים מצד שמאל. ואותו הדבר יש פונקציה שאומרת str.right תביא לי כמה תווים אתה רוצה מימין אין בעיה אני אחזיר לך ופתאום אנחנו מקבלים פה שגיאה כי כמובן אלו פונקציות שלא קיימות ואני המצאתי אותן.
היה ממש מגניב אם במחרוזת ב-C-sharp הייתה פונקציה נורא פשוטה שנקראת left והיא תחזיר לי כמה תווים שאני רוצה מצד שמאל. ופונקציה אחרת פשוטה שתחזיר לי כמה תווים שאני רוצה מצד ימין, זה מאוד מאוד שימושי.
לפעמים אנחנו רוצים לחתוך ככה מחרוזת. ואין, יש פונקציה אחרת שנקראת sub-string. סאבסטרינג אומרת לנו תביאו לי אינדקס התחלתי או שתביאו לי אינדקס התחלתי וכמה אתם רוצים ממנו ואני פשוט אקצץ לכם את המחרוזת איך שאתם רציתם.
לדוגמה בואו רגע נוריד את שתי הפונקציות האלה כי אין אותן ונגיד שאנחנו רוצים להציג את עשרת התווים מצד שמאל. סאבסטרינג הייתה צריכה לקבל 0.10 והיינו יכולים לראות את עשרת התווים מצד שמאל.
בואו האמת שיהיה יותר פשוט להריץ את זה כל פעם, לא נקבל את זה מהמשתמש אלא נכניס פה איזושהי מחרוזת. בואו נסתכל ונראה כרגע שיש לנו פה עשרה תווים מצד שמאל.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 תווים בול מצד שמאל. בסדר, בשביל להציג את חמשת התווים מימין בואו נעשה משהו אחר, כמובן עדיין אנחנו חייבים להשתמש בסאב סטרינג אבל אנחנו לא רוצים להתחיל מאפס אנחנו רוצים להתחיל חמישה תווים מהסוף זאת אומרת אנחנו צריכים ללכת
ל-str.length ולהוריד ממנה חמישה ואז להגיד שאנחנו רוצים את זה עד הסוף אם אנחנו לא שולחים עוד פרמטר אוטומטית הוא הולך עד הסוף בואו נבדוק את זה ואנחנו רואים שיש לנו פה חמישה תווים יש לנו את המילה ever עם סימן קריאה וכך הצלחנו להציג חמישה תווים מימין אז מה הבעיה אנחנו רואים שיש לנו כאן פתרון הנה סאבסטרינג 0 10 הנה סאבסטרינג שמקבל את sdr length פחות 5 הכל
בסדר אבל לא היה יותר מגניב ויותר נוח אם פשוט פעם כשבנו את המחלקה סטרינג המהנדסים של מייקרוסופט כל מה שהם היו צריכים לעשות זה להוסיף עוד פונקציה אחת שנקראת left כי זה כל כך נפוץ ועוד פונקציה אחת שנקראת right כי גם זה די נפוץ למה אני עכשיו צריך לעבוד קשה בשביל לעשות את כל החישובים המעיקים האלה
כל פעם שאני רוצה לקחת סדרה של תווים משמאל וסדרה של תווים מימין? למה? אם הייתה לי פונקציה כזאת במחלקה סטרינג זה היה לי מאוד נוח לשימוש אבל אין לי את הקוד של המחלקה סטרינג, אני לא יכול לרשת את המחלקה סטרינג כי היא סילד, לא ניתנת להורשה וגם אם הייתי יורש אותה עדיין
זה לא היה עוזר לי כי הייתי צריך להשתמש עם המחלקה שירשתי. כלומר המחלקה נגזרת אני לא רוצה אני רוצה להשתמש עם סטרינג אז extension method זאת שיטה שמסוגלת כביכול להוסיף פונקציה איזה שאנחנו רוצים במקרה הזה אנחנו הולכים להוסיף left וright למחלקה קיימת מבלי שיש לנו את הקוד בכלל איך אנחנו הולכים לעשות את זה כל מה שאנחנו צריכים לעשות זה להוסיף איזושהי מחלקה וזה לא משנה מה השם שלה בואו נקרא לה
מיי אקסטנצ'נס דרך אגב כל פעם שאתם רואים בתעשייה בפורומים באינטרנט איזשהו משתנה או מחלקה או שם כלשהו שמתחיל במאי מה שאתם צריכים לדעת לגביו זה שזה שם מומצא שאתם יכולים להחליט על כל שם אחר שבא לכם אז זאת הסיבה שתמיד משתמשים עם מאי מאי מאי בכל מיני שמות מאי אקסטנצ'נס זה אומר הנה מחלקה שאתם יכולים להמציא איזה שם שבא לכם לגביה
המחלקה הזאת חייבת להיות מחלקה סטטית ואנחנו יכולים לכתוב את הפונקציות שאנחנו רוצים בתוך המחלקה הזאת. בואו נשים פה בצד את המחלקה ונכתוב את הפונקציה הראשונה.
הפונקציה הראשונה זה left, אוקיי. פונקציה חייבת להיות סטטית. מה היא מחזירה? היא מחזירה סטרינג. בבקשה, הנה סטרינג.
איך היא נקראת? היא נקראת left. הנה השם שלה. מה היא מקבלת? לפי הפונקציה הזאת היא מקבלת מספר תווים שאנחנו רוצים לקחת משמאל למחרוזת אבל היא צריכה לקבל גם את אובייקט המחרוזת שמפעיל את הפונקציה לא רק זה גם אנחנו חייבים להתחיל במילה דיס את האובייקט הזה נקרא לזה s זאת אומרת
בואו שנייה אחת נוריד את המילה דיס ונבין למה אנחנו כן צריכים את המילה דיס כרגע אני אומר סטרינג s ו-int count. על הפונקציה לקחת את עשרת התווים, או יותר נכון count התווים מצד שמאל, ולכן כל מה שאנחנו צריכים לעשות זה להחזיר s.substring ולכתוב פעם אחת את הקוד הקשה.
הנה הקוד שכביכול היה חישוב להשיג אותו, ועכשיו אם אנחנו נוריד את התיעוד הזה אנחנו כאילו אמורים להבין של-left זאת פונקציה ששייכת לסטרינג אבל מי קבע שלפט שייכת לסטרינג הרי זאת סתם פונקציה סטטית שכתובה בסתם מחלקה סטטית ומקבלת סטרינג וקאונט בשביל לקחת את הפונקציה הזאת ולשייך אותה כביכול למחלקה סטרינג פה
אנחנו צריכים לשים את המילה דיס שוב מייקרוסופט