דיברנו כבר בעבר על הConstraint המיוחד where T : new() (טיפים מספר 33, 317).
מעניין להבין איך הוא עובד. ובכן, אם נכתוב קוד כזה:
|
|
נקבל את תוצאת הקימפול הזאת:
|
|
מה שאנחנו רואים כאן זה בעצם קריאה מורכבת לפונקציה Activator.CreateInstance<T>(). (עם התחשבות בboxים וכו’)
אם נקרא אודות התיעוד של הפונקציה הזו בMSDN, נראה שבעצם הפונקציה הזאת קיימת בשביל שימוש ב-new T().
לא ברור האם מבחינת ביצועים היא גרועה כמו Activator.CreateInstance (ראו גם טיפ מספר 139, 180), אבל אם נסתכל במימוש של שתי הפונקציות האלה בReflector, נראה שמדובר בשני מימושים שונים לחלוטין! (היינו מצפים שאחד יקרא לשני, או ששניהם יקראו לאותה פונקציה)
מה שנותן תקווה כי אולי המימוש הוא לא כל כך נורא.
אולי בהמשך נבצע השוואה בין 3 שיטות: Activator.CreateInstance(typeof(T)), new T() וקריאה רגילה לConstructor.
שבוע גנרי טוב!