ראינו בפעם הקודמת שיש דרך להחזיר את הערך הדיפולטי של Type גנרי.
לפעמים אנחנו רוצים לעשות יותר מזה – ממש לאתחל משתנה מהType הפנימי.
למשל, נניח שיש לנו ממשק של נקודה במרחב
|
|
ויש לנו אוסף של נקודות (זה יכול היה להיות למשל קוביה או תיבה).
היינו רוצים שתהיה לנו פונקציית Add כדלהלן
|
|
אבל לצערנו זה לא מתקמפל.
הבעיה היא שלא בהכרח קיים Constructor דיפולטי לTPoint, ולכן זה לא מתקמפל.
המציאו בשבילנו משהו שפותר את הבעיה הזאת: נוכל להוסיף לConstraint את התנאי
|
|
זה אומר לקומפיילר שTPoint יכול לקבל רק Typeים שיש להם Constructor דיפולטי.
מספר הערות:
- הnew() חייב להופיע אחרון ברשימה של הConstraintים
- למרבה הצער המנגנון לא מספיק חזק כדי שנוכל לציין את הפרמטרים שאנחנו מעוניינים שיופיעו בConstructor, למשל היה יותר טבעי שהמחלקה והממשק יראו ככה:
|
|
הקטע קוד לעיל לא מתקמפל. הדבר מונע מאיתנו לשים readonly properties בinterfaceים.
ראו גם טיפים 322-323 המסבירים מה קורה מאחורי הקלעים כשאנחנו קוראים לnew על פרמטר גנרי.
המשך יום גנרי טוב