آموزش سی شارپ c# درس ششم

 
ارسال شده در تاریخ 1392/7/22 توسط admin در زمینه آموزش سی شارپ
 
درس ششم - Namespaces
 
اهداف این درس به شرح زیر میباشد : آشنایی با Namespace در زبان C#
چگونگی استفاده از هدایتگر (using directive) using چگونگی استفاده از هدایتگر (alias directive) alias اعضای یک Namespace چه هستند؟
 
اگر به خاطر داشته باشید، در درس اول، در ابتدای برنامه از using System; استفاده نمودیم . با استفاده از این کد، امکان
دسترسی ما به اعضای Namespace مورد نظر، که در اینجه System است، فراهم می شد . پس از مطالعه این درس، مطالب بسیاری درباره هدایتگر using فرا خواهید گرفت .
 
Namespace ها، الما ن های زبان C# هستند که شما را در سازماندهی کردن برنامه، کمک می کنند . پیاده سازی Namespace ها در کد برنامه بسیار مفید است چراکه از ایجاد مشکلات مربوط به استفاده مجدد کد، پیشگیری مینماید .
 
چگونگی ایجاد Namespace به مثال زیر توجه نمایید . اعلان // Namespace
using System;
 
// C# Persian Namespace namespace csharp-persian
{
کلاس آغازین برنامه //
class NamespaceCSS
{
آغاز اجرای برنامه //
public static void Main()
{
چاپ خروجی در کنسول //
Console.WriteLine("This is the new C# Persian Namespace.");
}
}
}
مثال 6-1 چگونگی ایجاد یک Namespace را نشان می دهد . در این مثال ما با قرار دادن کلمه کلیدی namespace در جلوی csharp-persian یک Namespace جدید ایجاد نمودیم . مثال 6-2 ، Namespace های تودرتو را نشان می دهد . اعلان // Namespace
using System;
 
// C# Persian Namespace namespace csharp-persian
 
www.IRanproje.com
{
namespace tutorial
{
کلاس آغازین برنامه //
class NamespaceCSS
{
آغاز اجرای برنامه //
public static void Main()
{
چاپ خروجی در کنسول //
Console.WriteLine("This is the new C# Persian Namespace.");
}
}
}
}
 
Namespace ها این امکان را فراهم می آورند تا سیستمی جهت سازماندهی کدهای خود ایجاد نمایید . یک روش مناسب جه ت سازماندهی Namespace های برنامه، استفاده از یک سیستم سلسله مراتبی است . بدین ترتیب که Namespace های عمومی
را در بالای این ساختار قرار داده و هر چه در این ساختار پاین تر می آییم، Namespace های تخصصی تر قرار می گیرند . این سیستم سلسله مراتبی بوسیله Namespace های تودرتو قابل پیاده سازی هستند . این پیاده سازی در مثال 6-2 نشان داده شده است . با قرار دادند کدهای خود در Namespace های فرعی می توانید کدهای خود را سازماندهی نمایید . اعلان // Namespace
using System;
 
// C# Persian Tutorial Namespace namespace csharp-persian.tutorial
{
کلاس آغازین برنامه //
class NamespaceCSS
{
آغاز اجرای برنامه //
public static void Main()
{
چاپ خروجی در کنسول //
Console.WriteLine("This is the new C# Persian Namespace.");
}
}
}
مثال 6-3 روش دیگر ایجاد Namespace های تودرتو را نشان می دهد . همانطور که د ر این مثال مشاهده می نمایید، Namespace تودرتو با قرار دادن عملگر نقطه "." در بین csharp-persian و tutorial ایجاد شده است . این مثال از نظر کارآیی دقیقاً همانند مثال 6-2 است و از نظر پی ادهسازی آسا نتر از آن می باشد .
 
فراخوانی اعضای یک Namespace
 
www.IRanproje.com
اعلان // Namespace
using System;
 
namespace csharp-persian
{
تودرتو // namespace
namespace tutorial
{
class myExample1
{
public static void myPrint1()
{
Console.WriteLine("First Example of calling another namespace member.");
}
}
}
کلاس آغازین برنامه //
class NamespaceCalling
{
آغاز اجرای برنامه //
public static void Main()
{
چاپ خروجی در کنسول //
tutorial.myExample1.myPrint1(); tutorial.myExample2.myPrint2();
}
}
}
 
Namespace مشابه Namespace تودرتو بالا //
namespace csharp-persian.tutorial
{
class myExample2
{
public static void myPrint2()
{
Console.WriteLine("Second Example of calling another namespace member.");
}
}
}
 
مثال 6-4 چگونگی فراخوانی اعضای Namespace نشان می دهد . در ابتدای مثال 6-4 ، یک Namespace تودرتو اعلان شده است، tutorial درون csharp-persian ، که دارای کلاس myExample1 و متد myPrint1 می باشد . متد Main() این متد را با نام tutorial.myExample1.myPrint1 فراخوانی می نماید . چون متد Main() و tutorial درون یک Namespace قرار دارند، دیگر نیازی به استفاده از نام csharp-persian غیر ضروری است .
 
www.IRanproje.com
 
در انتهای مثال 6-4 ، یک Namespace دیگر بصورت csharp-persian.tutorial آورده شده است . کلاسهای
myExamlpe1 و myExample2 هر دو متعلق به یک Namespace می باشند، هرچند می تواند آنها را مجزا از یکدیگر نوشت در حالیکه متعلق به یک Namespace باشند . درون متد Main() ، متد myPrint2 بصورت
tutorial.myExample2.myPrint2 فراخوانی شده است . هرچند کلاس myExample2 خارج از محدوده ایست که متد myPrint2 فراخوانی شده است، نیازی به آمردن نام csharp-persian برای این فراخوانی وجود ندارد، زیرا هر دو کلاس متعلق به یک Namespace ، یعنی csharp-persian هستند .
 
توجه نمایید که برای هر یک از کلاسهای myExample1 و myExample2 نامهای متفاوتی انتخاب شده است، زیرا هر عضو متعلق به یک Namespace باید دارای نام یکتایی باش د . برای متدهای myPrint1 و myPrint2 ، بعلت سادگی در امر یادگیری این مطلب، نامهای متفاوتی در نظر گرفته شده است . توجه نمایید که این دو متد بعلت اینکه در کلاسهای متفاوتی قرار دارند، می توان نامهای یکسانی برایشان انتخاب نمود، و در اینصورت هیچگونه تداخلی بین ایندو ایجاد نخواهد شد .
 
استفاده از هدایتگر using اعلان // Namespace
using System;
using csharp_station.tutorial;
 
کلاس آغازین برنامه //
class UsingDirective
{
آغاز اجرای برنامه //
public static void Main()
{
فراخوانی عضوی از // Namespace
myExample.myPrint();
}
}
// C# PersianTutorial Namespace namespace csharp-persian.tutorial
{
class myExample
{
public static void myPrint()
{
Console.WriteLine("Example of using a using directive.");
}
}
}
 
در صورتیکه می خواهید متدهایی را بدون استفاده از نام کامل آنها، به همراه نام Namespace ، استفاده نمایید، می توانید از هدایتگر using استفاده نمایید . در مثال 6-5 ، دوبار از هدایتگر using استفاده شده است . اولین استفاده از این هدایتگر، using
 
www.IRanproje.com
System ، دقیقاً مشابه به همان چیزی است کع تا کنون در این درسها مشاهده نموده اید . با استفاده از این هدایتگر می توانید از اعضای موجود در System ، بدون اینکه نیاز به تایپ کلمه System در هربار د اشته باشید، استفاده نمایی د . در myPrint() ، کلاس Console عضوی از System است که دارای مت د WriteLine() می باشد . اگر در ابتدای برنامه از هدایتگر using استفاده نکنیم، باید برای هر دفعه استفاده از متد WriteLine() ، نام کامل آن یعنی System.Console.WriteLine() را تایپ نماییم .
 
به طور مشابه، استفاده از using csharp-persian.tutorial امکان استفاده از اعضای این Namespace را، بدون نیاز به
تایپ نام کامل آنها فراهم می نماید . چون در ابتدای برنامه از هدایتگر using استفاده نموده ایم، در متن برنامه متد myPrint() را بصورت myExample.myPrint() استفاده نموده ایم، درصورتیکه از هدایتگر using استفاده نمی گردیم برای استفاده از این متد باید آنرا بصورت csharp-persian.tutorial.myExample.myPrint() می آوردیم .
 
استفاده از هدایتگر Alias اعلان // Namespace
using System;
using csTut = csharp-persian.tutorial.myExample; // alias
 
کلاس آغازین برنامه //
class AliasDirective
{
آغاز اجرای برنامه //
public static void Main()
{
فراخوانی عضوی از // Namespace
csTut.myPrint(); myPrint();
}
متدی که ممکن است تولید ابهام نماید // .
static void myPrint()
{
Console.WriteLine("Not a member of csharp-persian.tutorial.myExample.");
}
}
// C# Persian Tutorial Namespace namespace csharp-persian.tutorial
{
class myExample
{
public static void myPrint()
{
Console.WriteLine("This is a member of csharp-persian.tutorial.myExample.");
}
}
}
 
www.IRanproje.com
در برخی موارد ممکن است با Namespace خاصی روبرو شوید که دارای نامی طولانی است و تمایل داشته باشید تا نام آنرا کوتاهتر نمایید . این کار با استفاده از ایجاد استعاره (Alias) امکا ن پذیر است . همانطور که در مثال 6-6 ملاحظه می نمایید، با استفاده از
csTut = csharp-persian.tutorial.myExample یک استعاره تولید کردهایم و در متن برنامه به جای استفاده از نام
طولانی csharp-persian.tutorial.myExample از نام مستعار آن یعنی csTut استفاده نموده ایم . حال از این نام مستعار در هر جای برنامه می توان استفاده کرد . ما در این برنامه در متد Main() استفاده نم ودهایم .
 
همچنین در متد Main() ، فراخوانی از متد myPrint() مربوط به کلاس AliasDirective صورت گرفته است . نام این متد همانند myPrint() موجود در myExample است . علت اینکه می توان هر دو این متدها را همزمان فراخوانی کرد، استفاده از هدایتگر alias برای متد myPrint() مربوط به کلاس myExample است (csTut.myPrint()) . استفاده از این روش باعث می شود تا کامپایلر دریابد که کدام متد را باید اجرا نمای د . در صورتیکه به اشتباه از هدایتگر (csTut.myPrint()) alias استفاده نکنیم، کامپایلر به اشتباه متد myPrint() مربوط به کلاس AliasDirective را دوبار اجرا خواهد کرد .
 
تا اینجا، ما تنها کلاسها را در Namespace ها نشان دادیم Namespace . ها انواع دیگری را نیز می توانند در خود داشته باشند که در زیر مشاهده می نمایید :
Classes Structures Interfaces Enumerations Delegates
خلاصه
در این درس با Namespace آشنا شدید و فراگرفتید که چگونه Namespace خود را اعلان نمایی د . اگر نخواهید در هربار استفاده از متدها یا اعضای یک Namespace ، نام کامل آنها را استفاده کنید، باید از هدایتگر using استفاده نمایید . در صورتیکه بخواهید بجای استفاده از نام طولانی یک Namespace ، از نامی ی . وتاهتر استفاده کنید، باید از هدایتگر استعار ه ای (Alias Directive) استفاده نمایید .

www.IRAnproje.com

Copyright © 2014 icbc.ir