216. protected internal access modifier

אז הכרנו את הAccess modifier ששמו internal.

אנחנו מכירים גם עוד Access modifiers כגון public,private וprotected.

protected, כזכור מאפשר לנו לגשת לMember של המחלקה שלנו גם במחלקות הבנות.

פחות מוכר הוא הAccess modifier ששמו protected internal. זהו איחוד של הAccess modifierים ששמם internal וprotected – מה שנסמן בAccess modifier זה יהיה נגיש למחלקות שיורשות מהמחלקה שלנו, ולמחלקות שהן “חברות שלנו” (כלומר באותו Assembly או שיש לנו InternalsVisibleTo אל הAssembly שלהן)

לדוגמה:

1
2
3
4
5
6
7
public class Animal
{
protected internal void AddChild(Animal child)
{
// ...
}
}

אז נוכל לקרוא לפונקציה AddChild ממחלקות בנות של Animal, או ממחלקות שחיות עם Animal באותו Assembly.

סתם להעשרה, הCLR תומך באפשרות של חיתוך של internal וprotected (כלומר Memberים שאפשר לגשת אליהם רק ממחלקות שהן גם בנות של המחלקה, והן גם "חברות" שלה), אבל שפת C# לא תומכת בזה.
עדכון: בC# 7.2 נוספה תמיכה בprivate protected, שזה בדיוק החיתוך שדיברתי עליו. ראו כאן.

כזכור, אני לא אוהב Memberים שהם internal, אבל שווה להכיר שקיים דבר כזה.

שבוע פנימי בטוח טוב.

שתף