ההסבר בפנים
למשתנה בשפות תוכנה יש שני מצבים, MUTABLE ו-IMMUTABLE.
זה אומר שאתה יכול לשנות או לא לשנות את האובייקט.
יש שפות שהשימוש בדרך כלל הוא לא לשנות אותו. למה זה טוב ? יש הרבה סיבות, אפרט את הראשונה שעולה לי לראש:
אתה תוכנה שחושפת API או SDK מה שזה לא יהיה שתקרא לזה, אתה חושף את זה למפתח, נניח אני פיפא והמשתמש ביקש ממני רשימת שחקנים במדינת ישראל, אני אחזיר לו LIST ואני אעדיף שהליסט תהיה immutable ככה שלא תוכל לשנות את מה שנתתי לך. אח'כ תוכל ליצור לעצמך מבנה נתונים ולעשות כרצונך עם המידע שנתתי לך.
נחזור לשאלתך, שהם יצרו את READ ONLY DICTONARY הם עושים את המילון immutable לכאורה, דרך אגב היה להם read only collection ורק עכשיו הוציאו את המילון לאור.
בגלל שזה dictionary הם חייבים לממש את כל המתודות של IDictionary כי הם מממשים אותו, ומכאן הם חייבים לממש את ADD. הם זורקים אקספשין כי זה המטרה.