218. Nested namespaces

באופן אנלוגי לNested types, קיימת לנו אפשרות להגדיר משהו שנקרא Nested namespace.

מה זה בדיוק?

זהו בעצם Namespace שמוכל בתוך Namespace אחר:

1
2
3
4
5
6
7
8
9
namespace TopNamespace
{
namespace SecondNamespace
{
Namespace BottomNamespace
{
}
}
}

כדי לגשת לטיפוס מהNamespace הפנימי נצטרך לציין את כלל הקינון:

1
TopNamespace.SecondNamespace.BottomNamespace.BottomType myInstance;

אפשר גם להשתמש בUsing directive:

1
using TopNamespace.SecondNamespace.BottomNamespace;

מה זה נותן לנו?

ברגע שנחיה בתוך Nested Namespace, נוכל לגשת לכל מה שיש Namespaceים שמעלינו בלי using:

למשל, בקובץ אחד נכתוב משהו כזה:

1
2
3
4
5
6
7
8
9
10
11
12
13
namespace TopNamespace
{
namespace MySecondNamespace
{
public class CoolType
{
}
namespace InnerNamespace
{
}
}
}

ובקובץ אחר:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace TopNamespace
{
namespace MySecondNamespace
{
namespace AnotherInnerNamespace
{
public class AnotherClass
{
public static void Access()
{
CoolType coolType = new CoolType();
}
}
}
}
}

בלי using!

בנוסף, שימוש בNested Namespaces מאפשר לנו לארגן את הקוד שלנו בצורה נכונה,

כלומר מי שמשתמש בקוד שלנו יוכל להתמצא ע"י שיטוט בNested Namespaces, כמו שיטוט בתיקיות היררכיות ברשת.

ככה אפשר לדעת למי שייך namespace מסוים, לפי הNamespace הראשי שמכיל אותו.

למשל, כל הNamespaceים של הFramework הם Nested Namespaces של System. ככה אפשר לזהות שהם של הFramework ולא שלנו.


דרך אלטרנטיבית להשתמש בNested namespaces היא באמצעות ציון השם הNamespace המקונן המלא:

ההגדרה:

1
2
3
4
5
6
7
8
9
namespace TopNamespace
{
namespace SecondNamespace
{
Namespace BottomNamespace
{
}
}
}

שקולה להגדרה:

1
2
3
namespace TopNamespace.SecondNamespace.BottomNamespace
{
}

האחרון הוא השימוש היותר נפוץ בNested namespaces.

אופן השימוש המומלץ הוא לחלק את הקוד לתת Namespaceים לפי מבנה הקבצים בפרויקט:

אם יש לנו בפרויקט תיקיות, עדיף שכל תיקייה תהווה תת Namespace של הNamespace בו היא נמצאת.

זו גם ההתנהגות הדיפולטית בVisual Studio – כאשר נוסיף מחלקה לתיקייה, הNamespace הדיפולטי שהיא תקבל יהיה תתNamepsace של הNamespace בו חיה התיקייה, ששמו של התת Namespace יהיה השם של התיקייה.

המשך יום מקונן טוב

שתף