גנרים מרחיבים את העוצמה והגמישות של VB.NET בהרבה תחומים, אך אתה מקבל יתרון ביצועים גדול יותר ואפשרויות תכנות רבות יותר בגנריות. רשימה חפץ [רשימה (של T)] מאשר עם כל אחד אחר.
להשתמש רשימה (של T), עליכם להבין כיצד ליישם את השיטות הרבות שמספק NET Framework. להלן שלוש דוגמאות המשתמשות לכל אחד, מצא הכל, ו סוג, זה מדגים כיצד הגנרי רשימה עובד בכיתה.
השלב הראשון הוא ליצור גנרי רשימה. אתה יכול לקבל את הנתונים בהרבה דרכים, אך הפשוטה ביותר היא פשוט הוסף זה. הקוד שלהלן מראה כיצד לסווג את אוסף הבירות והיין שלי!
קוד התחלה
ראשית צריך להיות חפץ שייצג בקבוק מהאוסף. ביישום Windows Forms, מחלקת הטפסים צריכה להיות ראשונה בקובץ או שמעצב Visual Studio לא יעבוד כראוי, אז שים את זה בסוף:
בקבוק בכיתה ציבורית. מותג ציבורי כמחרוזת. שם ציבורי כמחרוזת. קטגוריה ציבורית כמחרוזת. גודל ציבורי כעשרוני. תת ציבורי חדש (_. ByVal m_Brand כמו מחרוזת, _. ByVal m_Name As String, _. ByVal m_Category כמחרוזת, _. ByVal m_Size כעשרוני) מותג = m_Brand. שם = m_Name. קטגוריה = m_Category. גודל = m_ גודל. סיום משנה סיום כיתה
כדי לבנות את הקולקציה, הוסף הפריטים. זה מה שיש ב טען טופס אירוע:
ארון עמום כרשימה (של בקבוק) = _. "רשימה חדשה (של בקבוק) קבינט. הוסף (בקבוק חדש (_. "Castle Creek", _. "Uintah Blanc", _. "יין", 750)) קבינט. הוסף (בקבוק חדש (_. "חברת מבשלת קניון ציון", _. "ספרינגדייל אמבר אייל", _. "בירה", 355)) קבינט. הוסף (בקבוק חדש (_. "כרמי העמק הספרדי", _. "סירה", _. "יין", 750)) קבינט. הוסף (בקבוק חדש (_. "בירות Wasatch", _. "פורגי פוליגמיה", _. "בירה", 355)) קבינט. הוסף (בקבוק חדש (_. "בירה מפשירה", _. "פרובו פילסנר", _. "בירה", 355))
כל הקוד שלמעלה הוא קוד רגיל ב- VB.NET 1.0. עם זאת, שימו לב שעל ידי הגדרת משלכם בקבוק אובייקט, אתה מקבל את היתרונות של מספר סוגים באותה אוסף (במקרה זה, שניהם מחרוזת ו נקודה) ויעיל, הקלד "כריכה מאוחרת" בטוחה.
דוגמה לכל אחד
הכיף מתחיל כשאנחנו משתמשים בשיטות. כדי להתחיל, בואו ליישם את המוכר לכל אחד שיטה. התיעוד של מיקרוסופט כולל הגדרת תחביר שימוש זה:
מופע מעומק כרשימה מופע מעש כפעולה (של T) מופע. ForEach (פעולה)
מיקרוסופט מגדירה עוד יותר פעולה כ"ציר לשיטה המבצעת פעולה על האובייקט המועבר אליו. האלמנטים ברשימה (T) מועברים באופן פרטני לנציג הפעולה (T). "
טיפ: למידע נוסף על צירים, קרא שימוש בצירים ב- Visual Basic .NET לצורך גמישות בזמן.
הדבר הראשון שעליך לקוד הוא השיטה שתוקצה. אי הבנת נקודת המפתח היחידה הזו היא המקור ל רוב של הבלבול של תלמידי VB.NET. פונקציה זו, או תת-השמשה, היא המקום בו מתבצע כל קידוד המותאם אישית לאובייקטים מסוג "Of".
כאשר אתה מבצע נכון, אתה בעצם סיימת. זה ממש פשוט בדוגמא הראשונה הזו. מופע שלם של בקבוק מועבר והתת-רחוב בוחר את כל הדרוש ממנו. קידוד ה- לכל אחד גם הוא עצמו פשוט. פשוט מלא את הכתובת של הנציג באמצעות ה- כתובת של שיטה.
Sub displayBottle (ByVal b As Bottle) רשימת תוצאות. פריטים. הוסף (_ ב. מותג & "-" & _ ב. שם & "-" & _ ב. קטגוריה & "-" & _ b. גודל) סוף תת תת פרטי פרטי ForEachButton_Click (... רשימת תוצאות פריטים. נקה () רשימת תוצאות. פריטים. הוסף ("לכל דוגמה") רשימת תוצאות. פריטים. הוסף ("") ארון. ForEach (AddressOf displayBottle) סיום משנה
FindAll דוגמה
מצא הכל זה קצת יותר מסובך. התיעוד של מיקרוסופט עבור מצא הכל נראה ככה:
מופע מעומם כרשימה התאמה עמומה כפרדיקט (של T) עומק returnValue As List (Of T) returnValue = מופע. FindAll (התאמה)
תחביר זה כולל רכיב חדש, חיזוי (של T). לדברי מיקרוסופט, הדבר ייצג את השיטה "המגדירה מערכת קריטריונים וקובעת אם אובייקט שצוין עונה על הקריטריונים האלה. "במילים אחרות, אתה יכול ליצור כל קוד שימצא משהו ב- רשימה. קידדתי את שלי חיזוי (של T) למצוא משהו ב"בירה " קטגוריה.
במקום לקרוא לקוד הנציג עבור כל פריט ברשימה, מצא הכל מחזיר שלם רשימה (T) המכיל רק את ההתאמות שנובעות משלך חיזוי (של T). זה תלוי בקוד שלך כדי שתגדיר שניה זו רשימה (T) ולעשות עם זה משהו. הקוד שלי פשוט מוסיף את הפריטים ל- קופסת רשימה.
תת פרטי FindAllButton_Click (שולח ByVal כמערכת. אובייקט, מערכת ByVal e As. EventArgs) מטפל ב- FindAllButton. לחץ על רשימת תוצאות. פריטים. נקה () רשימת תוצאות. פריטים. הוסף ("FindAll דוגמה") רשימת תוצאות. פריטים. הוסף ("") סובליסט עמום כרשימה (של בקבוק) משנה משנה = ארון. FindAll (AddressOf findBeer) עבור כל בקבוק בקבוצה ברשימת תוצאות תוצאות משנה. פריטים. הוסף (_ r. מותג & "-" & _ r. שם & "-" & _ r. קטגוריה & "-" & _ r. גודל) פונקצית המשנה הסופית הבאה findBeer (ByVal b כבקבוק) _ כמו בוליאני אם (b. קטגוריה = "בירה") ואז להחזיר אמת אחרת חזור שקר סוף אם פונקצית הסיום
מיין דוגמה
השיטה הסופית שמאמר זה בוחן היא סוג. שוב, מיקרוסופט משתמשת במינוחים מסוימים שאולי אינך מכיר. יש למעשה ארבעה עומסי יתר שונים של ה- סוג שיטה:
- סוג()
- מיין (IComparer (T))
- מיין (השוואה (T))
- מיין (Int32, Int32, IComparer (T))
זה מאפשר לך להשתמש בשיטות מיון שהוגדרו ב- NET Framework עבור הרשימה, קוד משלך, השתמש במערכת השוואה מוגדרת לסוג, או למיין חלק מהאוסף בעזרת מיקום וספירה פרמטר.
בדוגמה זו, מכיוון שאני משתמש בתחביר הבא כדי לבצע בפועל את המיון, אני משתמש בעומס יתר שלישי.
איקס. שם.קס. שם. השווה אל (y. שם) (y. שם)
קידמתי ציר אחר למשווה שלי. מכיוון שאני רוצה למיין לפי שלי שם, אני שולף בדיוק את הערך הזה מכל מופע של ה- בקבוק אובייקט שמועבר ומשתמש ב - מיין (השוואה )>)). ה סוג השיטה מסדרת מחדש את המקור רשימה (T). זה מה שעובד לאחר ביצוע השיטה.
תת פרטי פרטי SortButton_Click (שולח ByVal כמערכת. אובייקט, מערכת ByVal e As. EventArgs) מטפל ב SortButton. לחץ על רשימת תוצאות. פריטים. נקה () רשימת תוצאות. פריטים. הוסף ("מיין דוגמה") רשימת תוצאות. פריטים. הוסף ("") ארון. מיין (AddressOf sortCabinet) עבור כל בקבוק בקבוצה בארון התוצאות. פריטים. הוסף (_ r. שם & "-" & _ r. מותג & "-" & _ r. קטגוריה & "-" & _ r. גודל) הסוף הבא משנה פונקציה משותפת פרטית sortCabinet (_ ByVal x כבקבוק, ByVal y כבקבוק) כהחזר מספר שלם x. שם. השווה אל (y. שם) פונקצית סיום
שיטות אלה נבחרו כדי להדגים את הדרכים העיקריות בהן מתבצעות שיטות המסגרת רשימה (T) למעשה מקודדים. עם זאת, יש מגוון שלם של שיטות אחרות. זה מה שעושה רשימה (T) כל כך שימושי!