فضای نام

فضای نام راهی برای دسته بندی کدهای برنامه می‌باشد. هر چیز در دات نت حداقل در یک فضای نام قرار دارد. وقتی برای یک کلاس اسمی انتخاب می‌کنید ممکن است برنامه نویسان دیگر به صورت اتفاقی اسمی شبیه به آن برای کلاسشان انتخاب کنند. وقتی شما از آن کلاسها در برنامه‌تان استفاده کنید از آنجاییکه از کلاسهای همنام استفاده می‌کنید در برنامه ممکن است خطا به وجود آید.

فضاهای نامی از وقوع این خطاها جلوگیری کرده یا آنها را کاهش می‌دهند. تا کنون و در درسهای قبلی ما فقط با یک فضای نام آشنا شده‌ایم و آن فضای نام System است که شامل تعداد زیادی کلاس و متد، مانند کلاس Console و متد Writeline() می‌باشد. اما اگر یک پروژه جدید ایجاد کنید به صورت پیشفرض یک فضای نام برای شما ایجاد خواهد شد که نام آن شبیه به نام پروژه‌تان می‌باشد. در این درس به شما نشان می‌دهیم که چگونه کلاسهایتان در کدهای جداگانه بنویسید و سپس از آنها در فایلهای جدا استفاده کنید. برنامه Visual Studio Community را اجرا و یک پروژه جدید ایجاد کنید. بعد از اینکه پروژه ایجاد شد، یک فایل جدید ایجاد کنید. چندین راه برای ایجاد یک فایل وجود دارد. یکی از راه‌ها این است که بر روی پروژه‌تان در Solution Explorer راست کلیک کرده و سپس گزینه Add و بعد New Item را انتخاب کنید.
namespace-in-visual-studio-1
راه دیگر این است که از نوار منو بر و از گزینه Project بر روی دکمه Add New Item کلیک کنید:
namespace-in-visual-studio-2
همچنین می‌توان از دکمه‌تر کیبی Ctrl + Shift + A استفاده کرد. هر کدام از این راه ها را که انتخاب کنید در نهایت یک صفحه برای شما نشان داده می‌شود و از شما سؤال می‌شود که چه فایلی را می‌خواهید ایجاد کنید :
namespace-in-visual-studio-3
گزینه Class را انتخاب کرده و نام آنرا Sample.cs بگذارید کدهای سی شارپ دارای پسوند cs هستند. برای درک منظور این درس همه کدهایی که در هنگام ایجاد کلاس به وجود می‌آیند را حذف کنید و کدهای زیر را وارد کنید :

   1: namespace MyNamespace
   2: {
   3:     class Sample
   4:     {
   5:         public void ShowMessage()
   6:         {
   7:             System.Console.WriteLine("Hello World!");
   8:         }
   9:     }
  10: }

همانطور که در کد بالا مشاهده می‌کنید فضای ناممان را تعریف کرده و نام آن را MyNamespace می‌گذاریم. در داخل کلاسمان (Sample) یک متد برای نمایش پیغام وجود دارد. به این نکته توجه کنید که با استفاده از فضای نام System، به متد WriteLine() کلاس Console دسترسی یافته‌ایم. می‌توانید با استفاده از کلمه کلیدی using فضای نام را از قبل تعریف کنید و آن را هنگام فراخوانی متد WriteLine() ننویسید (کد زیر). حال به فایل Program.cs برنامه‌ای که قبلاً ایجاد کردید بروید. محتویات آنرا پاک کرده و کدهای زیر را می‌نویسید :

   1: using MyNamespace;
   2: 
   3: class Program
   4: {
   5:     static void Main()
   6:     {
   7:         Sample test = new Sample();
   8: 
   9:         test.ShowMessage();
  10:     }
  11: }
Hello World!

با استفاده از کلمه کلیدی using همه محتویات فضای نام MyNamespace را که قبلاً ایجاد کردیم وارد برنامه جدید می‌کنیم (خط 1). اگر خط اول کد بالا را حذف کنیم، برای استفاده از هر چیز باید قبل از Sample از کلمه MyNamespace استفاده کنیم.

MyNamespace.Sample test = new MyNamespace.Sample();

می‌توان چندین کلاس یا رابط (interface) را به یک فضای نام اضافه کرد.

namespace MyNamespace
{
    class Sample1
    {

    }

    class Sample2
    {

    }
}

شما محدود به دسته بندی کدهای کلاستان در داخل یک فضای نام نیستید. می‌توانید یک فضای نام تو در تو ایجاد کنید و کدهایتان را در درون آن بنویسید :

namespace MyNamespace1
{
    namespace MyNamespace2
    {
        class Sample
        {
            public void ShowMessage()
            {
                System.Console.WriteLine("Hello World!");
            }
        }
    }
}

برای دسترسی به کلاس Sample، مجبورید اول نام تمام فضاهای نامی را که کلاس Sample در آنها قرار دارد بنویسید.

MyNamespace1.MyNamespace2.Sample

یا می‌توان از کلمه کلیدی using استفاده کرد :

using MyNamespace1.MyNamespace2;

دات نت فریم ورک دارای فضاهای نام تو در تو می‌باشد. به عنوان مثال System.Data.SqlClient سه فضای تو در تو می‌باشد. می‌توان برای راحتی در کد نویسی فضاهای نامی تو در تو، یک فضای نامی مستعاری ایجاد کنید :

using AliasNamespace = MyNamespace1.MyNamespace2;