זהו כנראה ההסבר האחרון על constraintים בgenerics.
(אנחנו עוד נראה ונשתמש בהם הרבה, אבל יהיה מדובר בטריקים ולא בהסברים על הFeatureים)
נניח שיש לנו מתודה גנרית עם מספר Typeים גנריים.
נוכל לכתוב בconstraint איזושהי יחס בין הטיפוסים הגנריים:
למשל נניח שיש לנו מתודה שמוצאת מקסימום, באמצעות IComparer (זהו ממשק שמאפשר לנו לעשות Compare בלי לממש ICompareable):
נוכל במקום להעביר את הIComparer לפונקציה לקבל את הסוג שלו וליצור אותו במתודה.
דוגמת קוד:
|
|
שימו לב לconsraint where TComparer : IComparer<T>, new(), בעצם יש לנו כאן constraint שמקשר בין שני הTypeים שמגיעים למתודה.
לT קוראים naked type constraint.
קריאה למתודה היא כבר לא implicity אלא explicity:
|
|
באופן דומה אפשר לעשות דברים כאלה:
|
|
כלומר להכריח את אחד הTypeים להיות Base class של השני.
יום גנרי טוב