כיצד לעבוד עם נציגים ב- C #

נציג הוא מצביע פונקציה בטוח מסוג שיכול להתייחס לשיטה שיש לה חתימה זהה לזו של הנציג. אתה יכול לנצל את הנציגים ב- C # ליישום אירועים ושיטות קריאה חזרה. נציג רב שידור הוא כזה שיכול להצביע על שיטה אחת או יותר שיש להן חתימות זהות.

הבנת נציגים ב- C #

בעיקרו של דבר, נציג מחזיק בהתייחסות לשיטה וגם לאובייקט היעד עליו יש לקרוא לשיטה. נציגים ב- C # דומים למצביעים על פונקציות ב- C ++, אך נציגי C # הם סוג בטוח. באפשרותך להעביר שיטות כפרמטרים לנציג כדי לאפשר לנציג להצביע על השיטה. נציגים משמשים להגדרת שיטות להתקשרות חוזרות וליישום טיפול באירועים, והם מוכרזים באמצעות מילת המפתח "נציג". אתה יכול להכריז על נציג שיכול להופיע בפני עצמו או אפילו לקנן בתוך כיתה.

ישנם שלושה שלבים בשימוש בצירים. אלה כוללים הצהרה, ייצוב והפעלה. 

החתימה של נציג נראית כך:

מזהה סוג תוצאה נציג ([פרמטרים])

ההצהרה הבאה מראה כיצד ניתן להכריז על נציג.

נציג ציבורי בטל MyDelegate (טקסט מחרוזת);

כפי שניתן לראות בהצהרה לעיל, שם הנציג הוא "MyDelegate", יש לו סוג החזרה של "בטל", והוא מקבל אובייקט מחרוזת כטיעון. זה מרמז שה- MyDelegate הנציג יכול להצביע על שיטה שיש לה חתימה זהה. זו רק הצהרה - עליך להפעיל נציג לפני שתוכל להשתמש בה. ההצהרה שניתנה להלן מראה כיצד באפשרותך להסדיר את הנציג שהוכרז לעיל.

MyDelegate d = MyDelegate חדש (ShowText);

לאחר שהצהרת ויישר את הנציג, תוכל להפעיל את השיטה אליה מצביע הנציג בקלות.

ד ("שלום עולם ...");

הנה, ד הוא מופע הנציג

באפשרותך גם להפעיל את השיטה שהמופע הנציג מצביע עליה באמצעות שיטת Invoke () במופע הנציג כפי שמוצג להלן.

d.Invoke ("שלום עולם ...");

אם יש לך שיטה שמקבלת שני מספרים ואתה רוצה להוסיף אותם ולהחזיר את סכום שני המספרים, אתה יכול להשתמש בנציג כדי לאחסן את ערך ההחזרה של השיטה כפי שמוצג בקטע הקוד שמופיע למטה.

תוצאת int = d (12, 15);

הנה רשימת הקוד המלאה לעיונך.

באמצעות מערכת;

נציגי מרחב שמות

{

    נציג ציבורי int MyDelegate (int x, int y);

    תכנית כיתתית

    {

      סכום int סטטי (int x, int y)

        {

            החזר x + y;

        }

        ריק סטטי ראשי ()

        {

            MyDelegate d = MyDelegate חדש (סכום);           

            תוצאת int = d.Inoke (12, 15);

            Console.WriteLine (תוצאה);

            Console.ReadLine ();

        }

    }

נציגים בפעולה ב- C #

הנה רשימת הקוד המלאה.

באמצעות מערכת;

נציגי מרחב שמות

{

    נציג ציבורי בטל MyDelegate (טקסט מחרוזת);

    תכנית כיתתית

    {

        חלל סטטי ציבורי ShowText (טקסט מחרוזת)

        {

            Console.WriteLine (טקסט);

        }

        ריק סטטי ראשי ()

        {

            MyDelegate d = MyDelegate חדש (ShowText);

            ד ("שלום עולם ...");

            Console.ReadLine ();

        }

    }

}

שים לב שאתה יכול להקצות מספר עצמים למופע נציג באמצעות המפעיל +, מה שהופך את הנציג לנציג שידור מרובה. ניתן גם לשלב בין מופעים נציגים בשיטה הסטטית Combine.

זמן הריצה מקיים רשימה (נקראת גם רשימת קריאה) באופן פנימי בכדי לבצע מספר שיטות. רישום הקוד הבא מראה כיצד ניתן להשתמש בשיטת Combine () לשילוב מספר מופעי נציג.

myDelegate d1 = myDelegate חדש (Method1);

myDelegate d2 = myDelegate חדש (Method2);

myDelegate multicastDelegate = (myDelegate) Delegate.Combine (d1, d2);

multicastDelegate.Invoke ();

נציג שיכול להצביע על מספר שיטות מכונה נציג רב שידור. שים לב שמקרי נציגים אינם ניתנים לשינוי. לכן, כאשר אתה משלב נציגים או מפחית מופע נציג אחד מהרשימה, נוצר מופע נציג חדש שייצג את הרשימה המעודכנת או החדשה של היעדים או השיטות שיש להפעיל.

נציגי שידור חי בפעולה ב- C #

רישום הקוד הבא ממחיש נציג שידור לקבוצה. שימו לב לשימוש במופע הנציג: כאן השתמשנו באופרטור + = כדי להקצות את הנציג למספר שיטות בעלות חתימות זהות.

באמצעות מערכת;

נציגי מרחב שמות

{

    נציג ציבורי בטל MyDelegate ();

    תכנית כיתתית

    {

        בטל סטטי ציבורי שיטה 1 ()

        {

            Console.WriteLine ("בתוך שיטה 1 ...");

        }

        בטל סטטי ציבורי שיטה 2 ()

        {

            Console.WriteLine ("בתוך שיטה 2 ...");

        }

        ריק סטטי ראשי ()

        {

            MyDelegate d = null;

            d + = שיטה 1;

            d + = שיטה 2;

            ד. קרא ();

            Console.ReadLine ();

        }

    }

}

נציגים מתאימים באופן אידיאלי ליישום תכנות מונחה אירועים. נציג לא צריך לדעת את המעמד של האובייקט אליו הוא מתייחס. כל שעליו לדעת הוא חתימת השיטה אליה היא תכוון. שימוש נכון בצירים יכול לקדם שימוש חוזר בקוד שלכם וגמישות בעיצוביכם. תוכל לעיין בתיעוד המקוון של מיקרוסופט למידע נוסף על נציגים.