הכל על ביצוע סידורים ב Visual Basic

סידרה היא תהליך המרת אובייקט לרצף לינארי של בתים קרא "זרם בתים". ייאוש פשוט הופך את התהליך. אך מדוע תרצה להמיר אובייקט לזרם בתים?

הסיבה העיקרית היא כך שתוכלו להזיז את האובייקט סביבו. שקול את האפשרויות. מכיוון ש"הכל הוא אובייקט "ב- .NET, אתה יכול לבצע סדרות כלליות ולשמור אותו בקובץ. כך שתוכלו לבצע סדרות בהמשכים, קבצי נתונים, המצב הנוכחי של מודול התוכנית ('מצב' הוא כמו תמונת מצב של התוכנית שלך בנקודת זמן, כך שתוכל להשעות את הביצוע באופן זמני ולהתחיל שוב יותר מאוחר)... כל מה שאתה צריך לעשות.

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

לכן הסידרה היא תהליך כה חשוב ב- .NET ו- ויז'ואל בייסיק. להלן קטע על הסידרה המותאמת אישית על ידי יישום ה- ניתנת להרחבה מחדש ממשק וקידוד א חדש ו GetObjectDataתת-רוטינה.

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

instagram viewer

מודולי SerializeParms
דוגמא לציבור
Parm1Name ציבורי כמחרוזת = "שם Parm1"
ערך ציבורי Parm1 כמו מספר שלם = 12345
Parm2Name ציבורי כמחרוזת
ערך ציבורי Parm2 כמו עשרוני
סיום כיתה
סיום מודול

לאחר מכן, ניתן לשמור ערכים בודדים בקובץ כזה:

מערכת יבוא. זמן פעולה. סידרה. מעצבים. בינארי
מערכת יבוא. IO
טופס מחלקה ציבורית 1
תת פרטי mySerialize_Click (_
שולח ByVal כמערכת. חפץ, _
מערכת ByVal e As. EventArgs) _
מטפל ב- mySerialize. לחץ על
עמעום ParmData כמו ParmExample חדש
ParmData. Parm2Name = "שם Parm2"
ParmData. Parm2Value = 54321.12345
Dim s כ FileStream חדש ("ParmInfo", FileMode. צור)
Dim f כ- BinaryFormatter חדש
ו. סידורי סדרות (ParmData)
s. סגור()
סיום משנה
סיום כיתה

ואותם ערכים ניתן לאחזר כך:

מערכת יבוא. זמן פעולה. סידרה. מעצבים. בינארי
מערכת יבוא. IO
טופס מחלקה ציבורית 1
תת פרטי פרטי myDeserialize_Click (_
שולח ByVal כמערכת. חפץ, _
מערכת ByVal e As. EventArgs) _
מטפל ב- myDeserialize. לחץ על
Dim s = FileStream חדש ("ParmInfo", FileMode. פתוח)
Dim f כ- BinaryFormatter חדש
Dim RestoredParms כמו ParmExample חדש
RestoredParms = f. מייתר / ים
s. סגור()
קונסולה. WritLine (RestoredParms). Parm1Name)
קונסולה. WritLine (RestoredParms). Parm1Value)
קונסולה. WritLine (RestoredParms). Parm2Name)
קונסולה. WritLine (RestoredParms). Parm2Value)
סיום משנה
סיום כיתה

א מבנה או אוסף (כגון רשימת מערך) ולא א מעמד יכול להיות גם בהמשכים לקובץ באותה דרך.

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

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

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

Parm3Value Public as String = "מה שלא יהיה"

בדוגמה, שים לב לכך לערוך סדרות ו מייתר הן שיטות של BinaryFormatter חפץ (ו בדוגמה זו).

ו. סידורי סדרות (ParmData)

אובייקט זה לוקח את FileStream אובייקט והאובייקט שישמש בהמשכים כפרמטרים. נראה כי VB.NET מציע אובייקט אחר המאפשר לבטא את התוצאה כ- XML.

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

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

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

ה- 'X' בתוך XML מייצג עבור eאיקסמתיחה. בדוגמת ה- XML ​​שלנו, אנו הולכים להשתמש באחת מאותן הרחבות של XML, טכנולוגיה הנקראת סבון. פירוש הדבר היה פעם "פרוטוקול גישה לאובייקט פשוט", אבל עכשיו זה רק שם. (SOAP שודרגה עד כדי כך שהשם המקורי כבר לא מתאים כל כך.)

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

מערכת. זמן פעולה. סידרה. מעצבים. סבון

... נוסף לפרויקט.

ואז שנה את שתי ההצהרות בתוכנית שמפנה אותה.

מערכת יבוא. זמן פעולה. סידרה. מעצבים. סבון
Dim f כמו סבון פורמט חדש

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

שם Parm1
12345
שם Parm2
54321.12345

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

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

לשם כך עליכם להעמיק מעט במושג ההמשכים. ל- VB.NET יש אובייקט חדש שיעזור כאן: SerializationInfo. למרות שיש לך את היכולת לקוד התנהגות בהמשכים מותאמים אישית, זה מגיע עם עלות קידוד נוספת.

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

מערכת יבוא. זמן פעולה. סידרה
_
התאמה אישית של המחלקה הציבורית
מיישם אפשרות להרחבה מחדש
נתונים שיש לבצע בהמשכים כאן
'Serialized public משתנה כסוג
תת ציבורי חדש ()
בונה ברירת מחדל כאשר הכיתה
'נוצר - קוד מותאם אישית יכול להיות
הוסיף גם כאן
סיום משנה
תת ציבורי חדש (_
מידע על ByVal כ- SerializationInfo, _
הקשר ByVal כ- StreamingContext)
לאתחל את משתני התוכנית שלך מ-
חנות נתונים בהמשכים
סיום משנה
תת ציבורי GetObjectData (_
מידע על ByVal כ- SerializationInfo, _
הקשר ByVal כ- StreamingContext) _
מיישם אפשרות להרחבה מחדש. GetObjectData
לעדכן את חנות הנתונים בהמשכים
ממשתני התוכנית
סיום משנה
סיום כיתה

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

בכיתה בדרך כלל יהיו תכונות ושיטות פורמליות המקודדות גם כן ...

'רכוש כללי
ערך חדש כמפרץ
נכס ציבורי NewProperty () כמחרוזת
לקבל
החזר את newPropertyValue
סוף גט
הגדר (ערך ByVal כמחרוזת)
newPropertyValue = ערך
סיום סט
נכס קצה
שיטה גנרית
MyMethod Sub משנה ()
קוד שיטה
סיום משנה

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

ה חדש תת-עורית תיראה כך:

תת ציבורי חדש (_
מידע על ByVal כ- SerializationInfo, _
הקשר ByVal כ- StreamingContext)
לאתחל את משתני התוכנית שלך מ-
חנות נתונים בהמשכים
Parm1Name = מידע. GetString ("a")
Parm1Value = מידע. GetInt32 ("b")
המשנה החדש ממשיך ...

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

MsgBox ("זהו Parm1Value Times Pi:" _
& (Parm1Value * מתמטיקה. PI). Tootring)

ההפך קורה מתי לערוך סדרות נקרא, אבל BinaryFormatter שיחות אובייקט GetObjectData במקום זאת.

תת ציבורי GetObjectData (_
מידע על ByVal כ- SerializationInfo, _
הקשר ByVal כ- StreamingContext) _
מיישם אפשרות להרחבה מחדש. GetObjectData
לעדכן את חנות הנתונים בהמשכים
ממשתני התוכנית
אם Parm2Name = "מבחן" ואז
מידע. AddValue ("a", "זה מבחן.")
אחרת
מידע. AddValue ("a", "אין מבחן הפעם.")
סוף אם
מידע. AddValue ("b", 2)

שימו לב שהנתונים מתווספים לקובץ ההמשכים כזוגי שם / ערך.

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

instagram story viewer