کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش فضا های نام در سی شارپ

دوره آموزش برنامه نویسی C#

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

فضا های نام (NameSpaces)

این درس فضای نامگذاری در C# را به شما معرفی خواهد کرد. اهداف ما از این بخش به قرار زیر است.

درک اینکه فضای نام چیست

یادگیری نحوه پیاده سازی حکم using

شناخت حکم alias

شناخت اعضای واقع در فضای نام

در درس 1 استفاده از حکم using System را در برنامه SimpleHello دیدید. این حکم به شما اجازه میدهد تا از اعضای فضای نام System  استفاده نمایید. به دلیل نکته بینی زیاد در آن درس نیاز دیدیم توضیح  را تا این فصل به تاخیر بیاندازیم. وقتی این درس را تمام کردید حکم یا دستور USING و موارد بیشتر را بهتر درک خواهید نمود. NS ها (از این پس بجای فضای نام ازاختصار NS استفاده می کنیم) عناصر برنامه C# می باشند که برای کمک به ساماندهی برنامه تان طراحی شده اند، این عناصر همچنین کمک می کنند تا از برخورد نام بین دو مجموعه از کد ها اجتناب کنید.

پیاده سازی NS ها در کدهایتان عادت خوبی است زیرا احتمالا شما را از مشکلات بعدی که هنگام استفاده مجدد از کدها  بدانها دچار می شوید نجات خواهد داد.

برای مثال اگر کلاسی بنام Console ایجاد کنید، نیاز بیدا می کنید که آنها رادر NS هایتان قرار دهید تا مطمئن شوید وقتی باید از کلاس System.Console یا کلاس خودتان استفاده کنید دچار افسردگی نشوید. معمولا ایده خوبی نیست که کلاسی به نام Console  درست کنید، اما در اکثر وضعیت ها کلاسهای شما هم نام کلاسهای کتابخانه کلاسهای .Net Framework یا کتابخانه های کمکی دیگر شرکت ها خواهد شد و NS ها به کمک تان می آیند تا از مشکلات مشابهت نام کلاس جلوگیری نمایید.

NS ها تطابقی با اسامی فایلها یا دایرکتوریها ندارند. اگر نامگذاری فایلها و دایرکتوری ها برای مطابقت با NS ها کمکتان می کند تا کدتان را سامان دهید؛سپس ممکن است این کار را بکنید اما اینکار ضروری نیست. به لیست 1-6 توجه کنید.

Listing 6-1. The C# Station Namespace: NamespaceCSS.cs
        // Namespace Declaration  
        using System;
        // The C# Station Namespace  
        namespace csharp_station
        {
            // Program start class  
            class NamespaceCSS
    {
                // Main begins program execution.  
                public static void Main()
                {
                    // Write to console  
                    Console.WriteLine("This is the new C# Station Namespace.");
                }
            }
        } 

لیست 1-6 نشان می دهد که چطور یک NS ایجاد نمایید. ما NS جدید را با قرار دادن کلمه namespace در جلوی csharp_station اعلان می کنیم. آکولادهای تودرتو اعضا را در NS با نام csharp_station  محصور می کند.

لیست 2-6

Listing 6-2. Nested Namespace 1: NestedNamespace1.cs
        // Namespace Declaration  
        using System;
        // The C# Station Tutorial Namespace  
        namespace csharp_station
        {
            namespace tutorial
            {
                // Program start class  
                class NamespaceCSS
        {
                   // Main begins program execution.  
                    public static void Main()
                    {
                       
// Write to console                          Console.WriteLine("This is the new C# Station Tutorial Namespace."
);                     }                 }             }         }

فضاهای نام به شما اجازه می دهند تا سیستمی درست کنید که کدهایتان را سازماندهی نمائید. یک راه خوب برای سازماندهی NS هایتان از طریق یک سیستم سلسله مراتبی است. اکثر اسامی عمومی را در بالای سلسله مراتب گذاشته و هر چه پایین میروید به موارد خاص تر می رسید. این سیستم سلسله مراتبی را میتوان با NS های تودرتو نمایش داد. با قرار دادن کد در NS های فرعی مختلف می توانید کدهایتان را سازماندهی شده نگه دارید.

لیست 3-6

Listing 6-3. Nested Namespace 2:  NestedNamespace2.cs
        // Namespace Declaration  
        using System;
        // The C# Station Tutorial Namespace  
        namespace csharp_station.tutorial
        {
            // Program start class  
            class NamespaceCSS
    {
                // Main begins program execution.  
                public static void Main()
                {
                    // Write to console  
                    Console.WriteLine("This is the new C# Station Tutorial Namespace.");
                }
            }
        }

لیست 3-6 راه دیگری برای نوشتن NS های تودرتو نشان می دهد. این مثال NS های تو در تو را با عملگر نقطه میان csharp_station و tutorial مشخص می کند. نتیجه دقیقا مشابه لیست 2-6 است و لیکن لیست 3-6 نوشتنش راحتتر است.

لیست 4-6

Listing 6-4. Calling Namespace Members: NamespaceCall.cs
        // Namespace Declaration  
        using System;
        namespace csharp_station
        {
            // nested namespace  
            namespace tutorial
            {
                class myExample1
        {
                    public static void myPrint1()
                    {
                        Console.WriteLine("First Example of calling another namespace member.");
                    }
                }
            }
            // Program start class  
            class NamespaceCalling
    {
                // Main begins program execution.  
                public static void Main()
                {
                    // Write to console  
                    tutorial.myExample1.myPrint1();
                    tutorial.myExample2.myPrint2();
                }
            }
        }
        // same namespace as nested namespace above  
        namespace csharp_station.tutorial
        {
            class myExample2
    {
                public static void myPrint2()
                {
                    Console.WriteLine("Second Example of calling another namespace member.");
                }
            }
        } 

لیست 4-6 مثالی از چگونگی فراخوانی اعضای NS  با روش نام گذاری کاملا مشخص را به شما نشان می دهد. نامگذاری کاملا مشخص (fully qualified name) هر عنصر زبان را از نام NS تا رسیدن به نام متد جهت فراخوانی را نمایش می دهد. در بالای لیست یک  namespace tutorial وجود دارد که در آن فضای نام csharp-station با کلاس myExample1 و متد myPrint1 قرار گرفته اند.Main () این متد را با نام گذاری کاملا مشخص بصورت tutorial.myExample1.myPrint1() صدا می زند. از آنجا که Main() و فضای نام tutorial در یک فضای نام مشابه قرار دارند استفاده از csharp_station در نامگذاری کاملا مشخص ضرورتی ندارد.

در پایین لیست 4-6 یک افزودنی به فضای نام csharp_station.tutorial namespace قرار دارد. کلاسهای myExample1 و myExample2 هر دو متعلق به NS یکسانی می باشند در Main() متد myPrint2() با نامگذاری کامل بشکل tutorial.myExample2.myPrint2() صدا زده می شود. اگر چه کلاس myExample2 خارج از حریم آکولادهایی که متد myPrint2 فراخوانی می شد قرار دارد فضای نام namespace csharp_station نیازی نیست که بخشی از نامگذاری کاملا مشخص باشد و این موضوع بدین خاطر است که هر دو کلاس متعلق به فضای نام namespace csharp_station یکسانی می باشند. توجه کنید که من از اسامی متفاوتی برای کلاس myExample1 و myExample2 استفاده کردم.اینکار ضروری بود زیرا هر عضو NS که از یک نوع باشند می بایستی نام یکتایی داشته باشند. به خاطر داشته باشید آنها دو تا در یک NS (فضای نام) یکسان هستند و باعث می شوند که شما سرگیجه نگیرید که از کدام کلاس استفاده می کنید. متدهای myPrint1() و myPrint2() اسامی مجزایی دار ند فقط به این خاطر که دنبال کردن درس را برایتان آسانتر نمایند. آنها می توانستند نام مشابهی داشته باشند بدون هیچ اثر منفی ای زیرا کلاسهایشان متفاوت است از اینرو جلوی هر گونه سردرگمی را می گیرد.

لیست 5-6

Listing 6-5. The using Directive: UsingDirective.cs
       
// Namespace Declaration 
       
using System;
        using csharp_station.tutorial;
       
       
// Program start class 
class
UsingDirective
{
           
// Main begins program execution. 
       
    public static void
Main()
            {
               
// Call namespace member 
       
        myExample.myPrint();
            }
        }
       
// C# Station Tutorial Namespace 
       
namespace csharp_station.tutorial
        {
           
class
myExample
    {
               
public static void
myPrint()
                {
                    Console.WriteLine(
"Example of using a using directive."
);
                }
            }
        }

اگر میل دارید متدها را بدون تایپ نام کامل شان صدا بزنید می توانید حکم using را پیاده نمایید. در لیست 5-6 دو حکم using را نشان می دهیم اولی using System  است همان حکم using که در هر برنامه این مقاله دیدید. این شکل استفاده کردن اجازه می دهد تا اسامی متدهای اعضای فضای نام system را بدون اینکه هر دفعه کلمه System را تایپ کنید استفاده نمایید.

در myPrint()؛ Console یک عضو کلاس فضای نام System با متد WriteLine() است. بطور مشابه حکم using به شکل using csharp_station.tutorial به ما اجازه می دهد تا اعضای فضای نام using csharp_station.tutorial  را بدون تایپ نام کاملا مشخص صدا بزنیم. بدون حکم using ما مجبور می شدیم هر دفعه که می خواهیم آن متد را صدا بزنیم عبارت csharp_station.tutorial.myExample.myPrint() را تایپ نماییم.

لیست 6-6

Listing 6-6. The Alias Directive: AliasDirective.cs
        // Namespace Declaration  
        using System;
        using csTut = csharp_station.tutorial.myExample; // alias  
        // Program start class  
class AliasDirective
{
            // Main begins program execution.  
            public static void Main()
            {
                // Call namespace member  
                csTut.myPrint();
                myPrint();
            }
            // Potentially ambiguous method.  
            static void myPrint()
            {
                Console.WriteLine("Not a member of csharp_station.tahlildadeh.myExample.");
            }
        }
        // C# Station Tutorial Namespace  
        namespace csharp_station.tutorial
        {
            class myExample
    {            
  
public static void myPrint()                 {                    Console.WriteLine("This is a member of csharp_station.tahlildadeh.myExample."
);                 }             }         }

گاهی اوقات ممکن است با NS بلندی مواجه شوید که بخواهید آنرا کوتاه تر کنید این کار باعث بهبود خوانایی شده و از بهم ریختگی نام که اسامی مشابهی دارند جلوگیری می کند. لیست 6-6 نشان می دهد که چطور یک نام مستعار (alias) را با حکم مستعار به صورت using csTut = csharp_station.tutorial.myExample ایجاد نماییم. حال عبارت csTut را می توان هر جایی استفاده کرد در این فایل در محل csharp_station.tutorial.myExample ما آن را در Main() استفاده می کنیم. در Main() همچنین یک فراخوانی به متد myPrint() از کلاس AliasDirective صورت گرفته است. این نام مشابه متد myPrint() در کلاس myExample است. دلیل این که هر دوی این متدها را میتوان با یک فراخوانی متد یکسان صدا زد در این است که متد myPrint() در کلاس myExample با استعاره CStUT کاملا مشخص شده است. این کار به کامپایلر اجازه می دهد بداند که دقیقا کدام متد می بایستی اجرا شده اگر ما به اشتباه csTut را از فراخوان متد حذف کنیم کامپایلر متد myPrint() از کلاس AliasDirective را راه اندازی می کند تا دوبار اجرا شود. تا بحال تمام چیزهایی که نشان دادیم NS های کلاسها بودند ولی به هر حال NS ها انواع دیگری را هم نگه می دارند مانند

کلاسها

استراکچرها

اینترفیس ها

شمارش ها

نماینده ها

بخش های آتی این نوع ها را با جزئیات بیشتر پوشش خواهد داد. به طور خلاصه فهمیدید که NS چیست و چگونه می توان آنرا اعلان کرد. اگر شما نمی خواهید نام کاملا مشخص را تایپ نمایید می دانید که چطور حکم using را پیاده نمائید. وقتی می خواهید یک اعلان NS بلند را کوتاه تر کنید می توانید از حکم alias  استفاده نمایید همچنین شما با برخی دیگر از اعضای ns علاوه بر نوع کلاس آشنا شدید. من شما را به مراجعه به درس 7 معرفی کلاسها دعوت می کنم.

1394/07/27 4171 1548
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...