سی شارپ - فضاهای نام

یک Namespaces برای این ایجاد شده تا مجموعه ای از نام ها را از مجموعه ی دیگری از نام ها حدا نگه دارد.در واقع کلاسی که با یک نام در یک فضای نام تعریف شده ، با کلاس همنام خود در فضای نام دیگر تداخلی ایجاد نمی کند

تعریف یک فضای نام

تعریف یک فضای نا با کلمه ی Namespaceشروع می شود و بعد ازآن نام Namespaces آورده می شود

namespace namespace_name
{
   // code declarations
}

برای فراخوانی یک تابع از یک فضای نام خاص کافیست نام آن فضای نام را قبل از نام تابع یا متغیر درخواستی بیاوریم

namespace_name.item_name;

نحوه ی استفاده از بالا در مثال زیر نمایش داده شده است

using System;
namespace first_space
{
   class namespace_cl
   {
      public void func()
      {
         Console.WriteLine("Inside first_space");
      }
   }
}

namespace second_space
{
   class namespace_cl
   {
      public void func()
      {
         Console.WriteLine("Inside second_space");
      }
   }
}

class TestClass
{
   static void Main(string[] args)
   {
      first_space.namespace_cl fc = new first_space.namespace_cl();
      second_space.namespace_cl sc = new second_space.namespace_cl();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}

نتیجه ی اجرای دستورا بالا به صورت زیر است

Inside first_space
Inside second_space

کلمه ی کلیدی using

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

Console.WriteLine ("Hello there");

کد بالا را می توان به شکل زیر نیزی نوشت

System.Console.WriteLine("Hello there");

شما همچنین می توانید با استفاده از using directive از اضافه کردن namespaces خودداری کنید. directive به کامپایلر می گویدکه کد مابعداز این نام ها در فضاهای نام خاصی استفاده میکند.همانظور که در کد زیر مشاهد می شود

اجازه بدهید کدمان را با استفاده از using directive بازنویسی کنیم

using System;
using first_space;
using second_space;

namespace first_space
{
   class abc
   {
      public void func()
      {
         Console.WriteLine("Inside first_space");
      }
   }
}

namespace second_space
{
   class efg
   {
      public void func()
      {
         Console.WriteLine("Inside second_space");
      }
   }
}   

class TestClass
{
   static void Main(string[] args)
   {
      abc fc = new abc();
      efg sc = new efg();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}

نتیجه ی اجرای دستورات بالا به صورت زیر خواهد بود

Inside first_space
Inside second_space

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

شما می توانید یک فضای نام را داخل فضای نام دیگری تعریف کنید

namespace namespace_name1
{
   // code declarations
   namespace namespace_name2
   {
      // code declarations
   }
}

برای استفاده از فضای نام های تودرتو از عملگر نقطه مانند زیر استفاده می شود

using System;
using first_space;
using first_space.second_space;

namespace first_space
{
   class abc
   {
      public void func()
      {
         Console.WriteLine("Inside first_space");
      }
   }
   namespace second_space
   {
      class efg
      {
         public void func()
         {
            Console.WriteLine("Inside second_space");
         }
      }
   }   
}
 
class TestClass
{
   static void Main(string[] args)
   {
      abc fc = new abc();
      efg sc = new efg();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}

نتیجه ی اجرای دستورات بالا به صورت زیر است

Inside first_space
Inside second_space