קה פרובלמה מואי צ'יקיטה?
כמו שאמרו ניתן לקבל params. יש לעומת זאת פתרון הרבה יותר ספציפי ונכון מבחינת בניית התוכנה. ברור שבאיזהשהו נקודה אתה יודע מה הפרמטרים שאתה צריך. באיזהשהו שלב במהלך העבודה של התוכנית אתה צריך אבסטרקציה כלשהי כדי באמת לעבוד מול איזהשהו Delegate יהיה אשר יהיה. לפי דעתי, את המקום הזה באפליקציה צריך לבודד החוצה ולדאוג שרק הוא יהיה אבסטרקטי שידע לטפל בכל דבר מכל סוג. אפשר לעשות את זה באמת ע"י שילוב של פונקציה שיכולה לקבל כל delegate באשר הוא, לקבל params של טיפוסים בלתי-ידועים ושתפעיל באמצעות אותם params את ה-delegate באמצעות DynamicInvoke.
public static void OperateSomeDelegateIDontKnowWhich(Delegate DelegateToRun, params object[] Parameters) { DelegateToRun.DynamicInvoke(Parameters); }
הפתרון הזה מאפשר לך באמת לרכז את האבסטרקציה של סוגי ה-Delegateים השונים למקום אחד בלבד באפליקציה. חשוב להזכיר, שלמרות שהפתרון הזה מונע שימוש מיותר בקוד בלא-רלוונטי בכך שהוא תוחם אותו במקום ספציפי, הוא עדיין בפני עצמו לא פתרון טוב. הוא פתרון טוב בזה שהוא מגביל את הטעויות שמתבצעות. הוא לא פתרון טוב בזה שהוא מעיד על ארכיטקטורה לקוייה ועל אי-מחסור בוטה ב-Design Patterns למיניהן שנועדו להקל על מצבים שדורשים DynamicInvoke. אם תרצה, תוכל לפרט מה המצב שהביא אותך להחלטה כזאת שבו אתה צריך להריץ כל מיני דברים בלי לדעת מה הם ונראה אם יש פתרון יותר OO לזה. (לא בהכרח שיש למשל כמו במצבים כמו לוגרים, אבטחה ועוד כמה מצבים נפוצים אחרים שאין פתרון, אבל אפשר לנסות)