214. InternalsVisibleToAttribute

אז פעם שעברה הכרנו את הAccess modifier ששמו internal.

אמרתי שבד”כ הוא מציין שMember או Type הוא ניתן לגישה בתוך הAssembly.

למה בדרך כלל? כי אפשר לשתף Memberים שהם internal בין Assemblyים ספציפיים שונים.

איך עושים זאת? בAssemblyInfo אפשר לציין בAttribute ששמו InternalsVisibleTo איזה Assemblyים יכולים לגשת לMemberים שלנו שהם internal.

למשל, ככה:

1
[assembly:InternalsVisibleTo("MyOtherAssembly")]

ככה הAssembly ששמו MyOtherAssembly יוכל לגשת לMemberים שהם internal מהAssembly שלנו.


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

על שיתוף Memberים שהם internal אני אפילו לא מדבר… (כמו שכתבתי פעם קודמת, אני לא כל כך אוהב Memberים שהם internal)

עם זאת, שווה להכיר את האופציה הזאת, כי זה יכול לעזור לכם במקרים מסוימים.

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

אני זוכר מקרה שאיזשהו צוות לא הכיר את הAttribute הזה, ונאלץ לשנות Modifierים של הרבה מאוד קוד מinternal לpublic.

עוד שימוש לגיטימי הוא למטרות Unit Testing: נניח שכתבנו מנגנון שמורכב ממספר מחלקות והן internal כיוון שהמשתמש אינו מודע אליהן. בכל זאת, נרצה לכתוב למחלקות אלה Unit tests. הדרך שנוכל לעשות זאת היא באמצעות InternalsVisibleTo.

המשך יום פנימי חשוף לכל טוב.

שתף