فضای نام در دات نت

فضای نام (namespace) چیست :
فضای نام ساختاری است برای دسته بندی و گروه بندی کلاس / ساختار / نوع های شمارشی و...  که به هم مرتبط هستند .
مثلا در NET. تمامی کلاس هایی که مربوط به خواندن و نوشتن فایل ها هستند در فضای نام IO قرار داده شده اند.
فضاهای نام به طور ضمنی public می باشند و این نکته را بخاطر داشته باشید که نمی توان برای فضاهای نام سطح دسترسی تعیین نمود . در صورتی که بخواهید برای یک فضای نام (namespace) سطح دسترسی تعیین کنید با خطای زیر رو به رو خواهید شد :

A namespace declaration cannot have modifiers or attributes

هر پروژه ای که ایجاد می کنید چه Windows form و چه Web forms همگی دارای یک فضای نام همنام با نام پروژه ایجاد شده هستند و تمامی کلاس ها و فرم هایی که ایجاد میکنید همگی در این فضای نام قرار دارند .

شکل کلی فضای نام ها :

 namespace  namspaceName
{
    [تعریف فضا نام های داخلی]
    ...تعریف کلاس ها / ساختار ها /رابط ها و 

}


این امکان وجود دارد تا فضاهای نام تو در تو ایجاد کنید در واقع فضای نام مورد نظر را در داخل فضای نام والد تعریف میکنید :

namespace  namspaceName
{
    namspace nested
        {
            class MathClass
            {

           ...
            }
        [تعریف فضاهای نام در صورت نیاز]
        }
    تعریف کلاس ها

}

 برای استفاده از کلاس ها / ساختار ها و ... موجود در فضا نام های مختلف و تودر تو  می بایست اسم فضای نام مربوطه را تا رسیدن به کلاس / ساختار مورد نظر با استفاده از . (نقطه) نوشت به صورت زیر :

 namspaceName.nested.ClassName

تکرار هر بار کد فوق برای استفاده از کلاس های مورد نظر کاری خسته کننده  می باشد برای اینکه هر بار کد فوق را در جای جای پروژه تکرار نکنید می توانید فضای نام مورد نظر را به پروژه خود اضافه کنید به صورت زیر :

 using namespaceName;
using namespaceName.nested;

و در هر کجا خواستید فقط کافیست اسم کلاس مورد نظر را بنویسید. 

برای درک بهتر و آشنایی بیشتر با نحوه استفاده از فضاهای نام یک پروژه از نوع 
WindowsFormsApplication به اسم SimpleNamespace ایجاد کنید .
کلید f7 را فشار دهید تا به محیط code فرم بروید می بینید که فرم ما در فضای نام simpleNamespace قرار دارد .

namespace SimpleNamespace
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

بر روی solution کلیک راست کرده و گزینه Add>New Project را انتخاب نمایید و یک پروژه از نوع Class Library با اسم FirstLib اضافه نمایید .
به صورت پیش فرض پروژه ایجاد شده  دارای یک کلاس به اسم Class1 می باشد که در فضای نام FirstLib قرار دارد .
کلاس دیگری به اسم class2 به پروژه FirstLib اضافه کنید و اسم فضای نام را از FirstLib به FirstLib2 تغییر دهید .
حال اگر در کلاس Class2 بخواهید به Class1 دسترسی داشته باشید ابتدا می بایست فضای نامی را که class1 در آن قرار دارد به class2 بیفزاید : 

using FirstLib;

بعد از افزودن فضای نام فوق می توان به کلاس های موجود در فضای FirstLib دسترسی داشت .

namespace-cshar

در صورتی که بخواهیم از فضاهای نامی که به صورت پیش فرض در دات نت نیستند و یا در سایر پروژه های دیگر قرار دارند نحوه استفاده از آنها متفاوت از روش ذکر شده بالا می باشد . 
در صورتی که قصد استفاده از فضاهای نامی را دارید که در سایر پروزه های دیگر قرار دارد ابتدا می بایست Add reference را انتخاب و فضای نام مورد نظر را انتخاب کنید .
 قصد داریم  در پروژه SimpleNamespace از فضای نام های موجود در پروژه FirstLib که از نوع Class Library می باشد استفاده کنیم ، برای اینکار ابتدا بر روی پروژه simpleNamespace کلیک راست و از منوی Add گزینه Reference را انتخاب کنید . در پنجره ظاهر شده تب projects را انتخاب و در قسمت سمت راست پروژه fistLib را انتخاب و دکمه ok را کلیک نمایید .با این کار اسمبلی پروژه فوق به لیست reference های پروژه اضافه خواهد شد .
حال به قسمت کد نویسی Form رفته و برای دسترسی به کلاس های موجود در FirstLib ابتدا با استفاده از using فضای نام مربوطه را برای استفاده  به پروژه اضافه نمایید .

namespace

و برای استفاده از کلاس های موجود در فضا نام های فوق به صورت زیر عمل خواهیم کرد :

 private void Form1_Load(object sender, EventArgs e)
        {
            Class1 classObj = new Class1();  // IN  FirstLib   namespace
            Class2 class2Obj = new Class2(); // IN  FirstLib2  namespace
        }

در صورتی که فضاهای نام را با استفاده از using به Form1 اضافه نمی کردیم می بایست هر بار اسم فضای نام مورد نظر را برای استفاده از کلاس های مورد نظر قرار می دادیم به صورت زیر : 

private void Form1_Load(object sender, EventArgs e)
        {
           FirstLib.Class1 classObj = new FirstLib.Class1(); 
           FirstLib2.Class2 class2Obj = new FirstLib2.Class2(); 
        }

برای تکمیل شدن بحث مثالی هم از فضا نام های تو در تو بیان میکنیم که به چه صورت مورد استفاده قرار میگیرند .
در فضای نام FirstLib موجود در FistLib Library یک فضا نام جدید به اسم StringSpace که دارای یک کلاس به اسم stringClass می باشد به صورت زیر اضافه کنید : 

namespace FirstLib
{
   namespace StringSpace
   {
       public class StringClass
       {

       }
   }
    public class Class1
    {
    }
}

حال در Form1.cs برای دسترسی به کلاس StringClass به یکی از دو روش زیر عمل خواهیم کرد :
1: 

private void Form1_Load(object sender, EventArgs e)
        {

            FirstLib.StringSpace.StringClass ClassObj = new FirstLib.StringSpace.StringClass();
        }

2:
افزودن  فضای نام :

using FirstLib.StringSpace;

 و جهت استفاده از کلاس :

StringClass ClassObj = new StringClass();

در زمان افرزودن فضا های نام با استفاده از کلمه using به این نکته توجه داشته باشید که این سلسله مراتب همیشه به اسم فضای نام خاتمه می یابد به جز در زمان معرفی نام های مستعار برای کلاس ها . 


توسط : عثمان رحیمی  4 ماه قبل ، پنج شنبه 17 مهر 1393 ساعت 01:52  0  1841

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط