הזכרתי את זה בקטנה פעם הקודמת, אבל מאחר וגיליתי שלא כולם מכירים את זה, נראה לי שזה שווה את הטיפ.
כשאנחנו עובדים עם מערכים נורמליים (כאלה שנוצרים באמצעות האופרטור new ולא בדרכים ביזאריות אחרות), יש לנו שתי אופציות לגשת לתא מסוים:
הדרך הראשונה היא באמצעות הפונקציות GetValue וSetValue של המחלקה האבסטרקטית Array ממנה יורשים כל המערכים:
(ChessPiece הוא איזשהו enum)
|
|
יש לזה יתרון, כי זה מאפשר לגשת לתא ידוע של מערך בגודל לא ידוע מטיפוס לא ידוע.
מצד שני, זה לא Typed-safe.
בנוסף, יש פה Boxing, מאחר והפונקציות האלה מקבלות ומחזירות object.
מה שנחמד במערכים, זה שלכל מערך יש Indexer שהוא Typed-safe. אפשר להשתמש בו כך:
|
|
שימו לב שבניגוד לדוגמה הקודמת, הדוגמה הזאת קורית בלי Boxing!
כדאי לשים לב שלמערכים יש את הפריבילגיה ליצור Indexer כזה שמתבסס על הגודל. למעשה, לכל מערך בגודל כלשהו קבוע הידוע בזמן קימפול, יש את הIndexer הזה, למשל:
|
|
במחלקה גנרית משלנו אי אפשר לעשות משהו כזה – אם היינו מממשים בעצמנו מערך, לא היינו יכולים להנות מFeature כזה.
המשך יום מאונדקס לטובה!