
הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 41» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שמתי לב, פצע, שמתי לב שיש לנו פה וויט בפיגר וגם בשייפ יש לנו את וויט. בשייפ יש לנו תכונה וויט שהיא מדברת יותר על העובי של הטוש מאשר על רוחב של השייפ.
ובפיגר יש לנו וויט שזה באמת רוחב של שייפ. אז שימו לב, זו הערה, היא רק רקות, כן, היא רק רקות כזו של סקוויגל, קו מסולסל, זו הערה, ומה אומר לנו הקומפיילר?
הוא אומר, the wits hides inherited member wits הוא שם לב לזה שבעצם אנחנו בזה שיש לנו שני שדות גם שני שדות עם אותו שם אחד אצל המוריש ואחד אצל היורש זה אומר שבעצם היורש מחביא את זה של המוריש כי זה משהו אחר הו זה בכלל תכונה זה property וזה שדה זה בעצם תכונה זה פרופרטי ובפיגר זה ממש שדה של דאטה אז הוא שם לב לזה שניהם אותו שם ואז הוא אומר אם אתה באמת התכוונת להחביא תשתמש use the new keyword if
hiding was intended אם באמת התכוונת ואתה לא רוצה לקבל את ההערה הזו כנראה שבגרסה הבאה של הדוטנט לחטוף שגיאה על השורה הזו אז תגיד private new אני מתכוון להחביא F6 ואז אין לי הערה בגרסה הבאה גם לא תהיה לי שגיאה נראה שבגרסה הבאה כבר תהיה שגיאה על דבר שכזה אין דבר כזה צריך להיות החלטי אתה לא יכול להשאיר את זה כזה באוויר אבל האמת היא שהמילה וויט לא כל כך מתאימה לדעתי בשייט בשייט פה מדובר על עובי הייתי קורא
לזה פיקנס זה פרייבט זה לא כל כך משנה הוא לא לא בעניין אבל בכל זאת בוא נשנה את וויט לפיקנס כל המערכת קונטרול h וויט צריך להיות או thickness או v, match case, match whole world, search hidden, בקרנט פרוג'קט, וזה פרייבט, זה חייב להיות רק בקרנט דוקימנט, ונגיד לו replace, גם את זה,
אז זהו, אז הוא מחליף את זה, אבל הוא לא מחליף את זה עם האנדרוס, אנחנו נגיד לו בלי match whole world, ואז נגיד לו, replace את זה, וreplace את זה, ואת זה, ואת זה, ואת זה, ואת זה, יפה.
זה היה כאן זה היה המשתנה המקומי עכשיו למשהו טיפה יותר מאתגר וזה הפרופרטי אז אני אשנה אותה כאן ל-thickness ונשתמש ב- rename ונעשה F6 יפה ואין אפילו הערה שזה מצוין זה גם הרבה יותר הגיוני הבעיה היא שלאלה אנחנו קוראים גם כן wits זה גם מן הראוי היה לקרוא להם thickness ולא wits כי זה צריך להתבלבל אבל
זה לא ענייננו להיום היום מה שאנחנו הולכים לעשות זה סייב ואופן בואו רק נכתוב פה שעשינו את זה יפה אז איך עושים סייב ואופן כשאני עושה סייב אני רוצה לראות קודם כל כשאני לוקח את הסייב הזה אני מצפה לראות דיאלוג אז נוסיף דיאלוג של סייב דאבל קליק מוסיף לי אותו כשאני אומר פייל סייב אס דאבל קליק דאבל קליק אני מצפה להציג את הדיאלוג היוזר מצפה לראות את הדיאלוג סייב אס
זה דיאלוג, אבל עם F קטנה ועם אחד לסוף, זה האובייקט שלנו. show dialogue, תציג אותו. אותו דבר לגבי הopen, double click. אז צריך open דיאלוג, אז צריך להוסיף אותו, F7, ונגרור open file dialogue, למרות שההבדל ביניהם הוא מינורי, זה יותר נוח שיהיו שניים נפרדים, ושוב נחזור
לopen שלנו, וopen file dialogue 1. show dialogue. יפה, זה מה שגורם לדיאלוג להיות מוצג. עכשיו, כשהיוזר לוחץ על אוקיי, אז אפשר להגיד לו אופ או דאבל קליק, אופ או דאבל קליק על זה, זה גם יופעל, גם סייב וגם אופן.
אז מה אנחנו רוצים במצבים שכאלה? מה זה בעצם סייב ומה זה בעצם אופן? אז טוב, אנחנו נשתמש במנגנון שנקרא סיריאליזיישן. עד היום למדנו לשמור לקובץ ולקרוא מקובץ בעזרת ה-Stream Reader ו-Stream רייטר שכותבים טקסט וקוראים טקסט וזה נורא נחמד אבל זה לא כלי עבודה רציני אנחנו רוצים להשתמש בסופ פורמטר
אז נכתוב סופ פורמטר והוא לא נמצא טוב אז הוא אמור להכיר אותו אבל הוא לא מכיר אותו אז נוסיף לו פה using בקורה ידנית using system.runtime.serialization.formatters אז אם נסתכל בhelp אנחנו נראה ש-soap formatter נמצא בסיסטם רנטם סיריליזיישן פורמטר soap name stage.
כשאנחנו באים לכאן ל-visual studio ואנחנו מנסים להוסיף אותו אז הוא אומר לנו binary אין לו פה הוא אמור להגיד לי soap הוא לא אומר אותו זאת אומרת חסר לו הוא רפרנס אז אנחנו הולכים לרפרנסס ומוסיפים רפרנס לדבר הזה סיסטם רנטם סיריליזיישן פורמטר soap כנראה שהוא ב-dll נפרד משלו ועכשיו נגיד לו פה פה using והנה soap ושוב נלך ל-soap ונגיד soapformatter.sf שווה ל-new
soapformatter.sf.serialize אנחנו רוצים לעשות serialize לתוך ה-file stream אז נגדיר file stream ונכתוב file stream בצורה ברורה file stream והנה השופצ'יק בא לעזרנו ונגיד לו using system.io והוא שם את זה במקום כמובן הלא נכון צריך שזה יהיה כאן ועכשיו נגיד לו FileStream
0 שווה ל-New FileStream וכאן אנחנו אומרים לו שם הכובד תכף נחזור לזה ו-FileMode הולך להיות לכתיבה זה לא תמיד אני מתבלבל מ-Create ל-Create New ל-Open Open או-Create Create is equivalent to requesting that if the file does not exist it will create בוא נקרא את זה בצורה מסודרת פייסבייל זה אופרנטי שקריט ניו פייל אם הפייל
הזה אקזיסט it will be overwritten נראה טוב בסדר עוד איזה פרמטרים אפשר להגיד לו פייל אקסס זה לרייט ופייל שייר זה בכתיבה אנחנו לא רוצים לחלוק את הקובץ הזה עם אף אחד עכשיו כשאני עושה סריאלייז אני אומר לו לכתוב לפייל סטרים תכף נעבור על הקוד הזה בצורה מאוד ברורה
הכל יהיה נורא ברור והאובדקט שלנו זה בעצם שייט אז נלך למצוא את שייפס, הנה שייפס, ופה פשוט ניתן לו את שייפס, נדרוס את זה כדי שיהיה מסודר, יפה.
זו הכתיבה לכובד. הייתי רק אומר פה בהתחלה, יוזינג, מה זה אומר? זה אומר שאם משהו קרה לנו, אם הכל עבר בשלום, אז בסוף היוזינג הפייל סטרים נסגר, יותר נכון הוא dispose.
ואם משהו חרג ולא הסתדר, עדיין הוא ייסגר. אחרת הוא יישאר פתוח אם לא אני אשתמש ביוזינג הזה אז הוא יישאר פתוח עוד נחזור לדבר על היוזינג הזה ומה בדיוק זה אומר בוא נעשה F6 כאן לא הגדרנו את path אז נגדיר את path אז נגדיר string path שווה לסייב פייל דיאלוג 1 נקודה פייל ניים F6 בילד סקסידד יפה זה שומר בוא נשים פה breakpoint וננסה להריץ את זה
ונצייר לו מלבן, עיגול מלא ומלבן, לא רציתי אדום, נעשה קו כזה ואולי נבחר את המלבן, נעשה לו ירקרק שכזה.
אז נגיד לו save as. הוא נבחר שם של קובט, נקרא לזה drawing 01 נקודה, איזה סיומטר אנחנו נבחרנו? נקודה ש... לא, אנחנו בצאת שבע, אנחנו עדיין לא בשלב הארכיטקטורה.
זה בעצם whiteboard 1, אפשר להגיד, מה שבא לנו. הגענו לנקודה הזו, ונעשה step into, אז יש לנו את הפס, זה הנתיב, מקום מאוד מעניין, ויצאנו את ה-file stream, יצרנו את ה-soap formatter, חילצנו את ה-current slide, חילצנו את shapes,
עכשיו אני אגיד לו, serialized זה כנראה יקרוס, בואו ננסה, לקח לו קצת הרבה זמן, אבל בסוף הוא קרס, סריאליזיישן אינסטרפצ'ן וואז אנט הנדלד.
דה טייפ פיגר אין אסמבלי בלה בלה בלה is not marked as serializable. מה בעצם הוא אומר? הוא אומר שפיגר היא לא ניתנת לסריאליזיישן. מה זה סריאליזיישן?
ומה זה אומר not marked as serializable? האמת היא שזה משהו די פשוט. הרעיון הוא שבעצם הפונקציה serialize הוצאה את כל העבודה שאנחנו עשינו באדרסבוק באדרסבוק אנחנו בחרנו איך לפרמנט את הכובד והסופט פורמטר הוא המקביל שלנו והוא זה שבוחר איך לפרמנט את הכובד ואחרי זה אם נשתמש בו באופן אז הוא גם ידע איך בעצם הוא פרמנט את הכובד איך הוא סידר
את הכובד ואז גם הוא יפתח לנו אותו הוא כבר יעשה את כל העבודה אבל על מנת שהוא יצליח לסדר את הכובד הוא צריך לגשת לכל השייפים שנמצאים בתוך שייפ כמו פיגר וליין לפרי-הנד והוא צריך בעצם לפנות לכל אחד ולהגיד לו תיתן לי את התוכן שלך כדי שאני אכתוב אותך לכובד אז האמת היא שזה נורא פשוט לעשות את זה אנחנו בסך הכל הולכים לשייפ ולכל היורשים
של שייפ פשוט מוסיפים לסוגריים סיריליזאבל וככה אנחנו עושים לכל היורשים לליין ולפרי-הנד ולפיגר שעליה את השגיאה שלא ראינו אז נשים את זה לפיגר נשים את זה לפרי-הנד נשים את זה לליין נשים את זה לשייפ נעשה את זה גם לטקסט כמובן לכולם צריך ללא יותר מהכלל פורום אחד זה לא מעניין ושוב נגיע
לנקודה הזו ונריץ שוב ונגיד לו פרי אנד אחד שחור כזה זה וכזה ושוב נגיד לו סייב נבחר את אותו שם של כובע נדרוס אותו נגיע לאותה נקודה ונעשה סטפ אינטו טוב יש לנו עוד בעיה שפן היא בעצמה של המערכת והיא לא ניתנת לסריאליזיישן אותה לא ניתן להפוך כן מה זה בעצם סיריאליזיישן לא אמרנו סיריאליזיישן to serialize זה לקחת בעצם אובייקט בזיכרון כמו שייט ולהמיר אותו
לרצף אחד ארוך של בתים לעשות עליו סיריאליזיישן סיריאליז זה להפוך את זה לרצף משהו סיריאלי זה משהו רציף אחד אחרי השני כמו רוצח סיריאלי הוא פשוט הורג כל אחד אז להפוך משהו לסריאלי זה להפוך את זה לבית אחרי בית.
בזיכרון שפט הוא בעצם אפשר להגיד עליו שהוא גרף של אובייקטים וזה גם מה שרוצה לקבל הפונקציה כאן אובייקט גרף גרף של אובייקטים כי כל אובייקט בזיכרון זה בעצם גרף זה מצביע למצביע למצביע זה נקרא גרף במדעי מחשב קוראים לזה יש תחום שנקרא תורת הגרפים סוגרת הגרפים מדברת על הנושא של שאובייקטים מצביעים לאובייקטים שמצביעים לאובייקטים וזה
נקרא גרף. אז שייפס הוא בעצם גרף, הוא עונה על ההגדרה. הבעיה היא שבסופו של דבר מישהו שם מכיל שדה מסוג פן. בואו נראה מיהו זה שמכיל את השדה מסוג פן, לא התפלא שזה שייפס.
אז לשייפס יש שדה מסוג פן וזה מה שהורס לנו את היום ואחרי זה גם את בראש וזה די מעצבן. אז אולי נעשה שבמקום ליצור כל פעם את הפן פורטקטד במקום לאכסן את הפן אנחנו פשוט נחזיר אותו כפרופרטי כי מה שהסיריאליזיישן מנסה לעשות הוא עובר על השדות האמיתיים והוא מנסה לעשות להם סיריאליזיישן, אז כלר כנראה שהוא סיריאליזבילי
ופלואוט הוא סיריאליזבילי כל השדות הם סיריאליזביליים הפונקציות לא מעניינות את הסיריאלייזר אבל השדות כן אנחנו לא נעשה את פן ואת בראש כשדות אלא נהפוך אותם לפרופרטיז ונעשה פה גט שעושה return new pen והפן הזה אני אתן לו את color ואת wick או ששינו את זה כבר
לsickness ונריץ, לא נריץ אפילו שוב, פשוט נשנה גם את בראש, נוסיף לה את גט ונעשה return new solid brush היא מקבלת פשוט את ה-color וננסה להריץ שוב ריצארט ואנחנו עדיין צריכים לאחסן איפשהו אז זהו שאנחנו לא צריכים לאחסן מיותר לחלוטין כי כל פעם שמישהו מבקש את הפן שלי את הבראש שלי פשוט אני מקצה
לו אותה מחדש את color ואת width אני תמיד שומר ונריץ שוב אז שמעתי את color ואת thickness יפה ואולי נעשה משהו פשוט כמו רק FE, סילד אליפט, ונעשה פייל סייב אס, בואו נראה שזה עובד.
הגענו לסירילייז, והפעם זה הצליח, בשעה טובה, ונמשיך את ההרצה. ובואו נראה מה בעצם נוצר לנו. אז נלך לקבצים של גרסה 36, זה נמצא בווייד וורד בין דיבאג, וזה הכובד.
נעשה לו אופן, אז הוא ישאל אותי איך, אני אגיד לו תבחר, ונבחר את notepad, ככה זה נראה, האמת אני אבחר אפילו מישהו טיפה יותר חמוד כמו אינטרנט אקספלואוור, טוב האינטרנט אקספלואוור לא כל כך רוצה לבוא לעזרים אבל בואו נראה בעצם מה יצא לנו, זה הכובד, ומה כתוב פה? SOP, PNV,
אנדוולופ, משהו נורא ארוך ולא מובן, SOP BODY, A1, אוה הנה הרייליסט שלנו, מה עוד אפשר לראות בטיפות שלו, הוא מסוג סיסטם קולקשן באמת, ניימספייס של ה-CLR, של סכמה של מייקרוסופט דוט קום אפשר אפילו ללכת לאתר הזה ולראות שם את ההגדרה של סיסטם קולקשן ושם למצוא את הרייליסט אחד זה בעצם
ההגדרה של a1 בxml name space מה זה xml ולמה xml זה באמת בהזדמנות אחרת ניכנס יותר לעומק מוד אנחנו יכולים לראות פה אז יש לנו את figure הנה figure שלנו והנה אליפס והנה is field שווה לטרו ולטייץ והאיקס 122 והוואי 87 והוויט 179 וההייט 118 וכנראה שאנחנו יורשים את קלר יש פה איזה value 0 ונון קלר 35
האמת אני לא בדיוק עוקב אחרי כל הדברים האלה אבל זה גם לא משנה זה בינו לבין עצמו הוא שמר את הקובץ, כל מה שנותר לי לעשות עכשיו זה לקרוא את הקובץ הזה אז בואו עכשיו נוסיף כתיבה, קריאה מקובץ וזה ממש אותו דבר, ניקח נשכפל פשוט את הקוד הזה ונגיד לו שוב פייל פאס וזה לא קריאייט בואו נראה עוד איזה דברים נחמדים יש לו, יש
לו את אופן, מקווה שזה טוב פייל אקסס אנחנו רוצים כתיבה בלבד ושייר לא אכפת לי שמישהו אחר גם יקרא בזמן שאני קורא, זה לא מפריע אני עכשיו הולך לבצע את זה נעשה אחרי זה, אני עכשיו הולך לבצע פעולה הפוכה, זה נקרא