استفاده از فضای نام(Namespace) در سی شارپ
در اینجا قصد داریم به یک موضوع مهم در برنامه نویسی سی شارپ، یعنی فضای نام(namespace) بپردازیم. از فضای نام، برای قرار دادن کدهای برنامه در یک ظرف و بسته بندی کردن آنها استفاده می شود به طوری که کد و محتویات آن به طور منحصر به فرد مشخص شوند. از فضای نام در فریم ورک دات نت بعنوان وسیله ای برای دسته بندی کردن آیتم ها استفاده می شود.
اکثر این آیتم ها، تعاریف نوع(type definitions) هستند، مانند نوع های ساده ی به کار رفته در این فصل(مثل System.Int32 و غیره). کدهای سی شارپ به طور پیش فرض در داخل فضای نام سراسری(global namespace) قرار دارند. این یعنی اینکه این کدها، در کدهای دیگری که در فضای نام سراسری قرار دارد نیز با ارجاع به آنها توسط یک نام در دسترس هستند.
ما می توانیم از کلمه کلیدی namespace برای تعریف یک فضای نام برای یک قطعه کد که در داخل یک جفت آکولاد قرار دارد استفاده کنیم. اگر ما یک کد در یک فضای نام داشته باشیم که نیاز داشته باشد از یک نام در یک فضای نام دیگر استفاده کند، ما باید یک ارجاع به این فضای نام اضافه کنیم. آدرس ارجاع به فضای نام، با استفاده از یک نقطه(.) از یکدیگر جدا می شوند؛ مانند زیر:
namespace LevelOne
{
// LevelOne کدهای درون فضای نام
// تعریف شده است NameOne نام
}
// کدهای فضای نام سراسری
در این کد، یک فضای نام، به نام LevelOne تعریف شده است. و نام NameOne نیز در داخل آن تعریف شده است(هیچ کد حقیقی در اینجا نشان داده نشده است؛ این یک مثال کلی است؛ به جای آن، یک کامنت قرار داده ایم که مفهوم را مشخص می کند). کد نوشته شده در درون فضای نام LevelOne به سادگی می تواند با استفاده از نام NameOne به این نام (یعنی NameOne) رجوع کند. به هیچ طبقه بندی(classification) نیز نیازی نیست.اما کدهای درون فضای نام سراسری، باید با استفاده از نام طبقه بندی شده ی LevelOne.NameOne به این نام رجوع کنند.
به یک نکته ی مهمتر نیز در اینجا توجه کنید: دستور using به خودی خود به ما امکان دسترسی به نام ها در دیگر فضای نام ها، را نمی دهد؛ مگر اینکه کد موجود در فضای نام، به نحوی به پروژه ما لینک شده باشد. با تعریف شدن در یک فایل منبع(source file) در پروژه یا تعریف شدن در کدهای دیگر مرتبط با پروژه، به نام های موجود دسترسی نخواهید داشت. بعلاوه، اگر کدی که حاوی یک فضای نام است، به پروژه ی ما متصل (یا پیوند) شده باشد، آنگاه ما به نام های قرار گرفته در آن کد دسترسی داریم، صرف نظر از اینکه از using استفاده می کنید یا نه. فرمان using دسترسی به این نام ها را برای ما راحت تر می کند و می تواند کدهای طولانی را کوتاه کند تا خواناتر شود.
به کدهای برنامه ConsoleApplication1 که در ابتدای این فصل نشان داده شد برمی گردیم، یعنی به کدهای زیر توجه می کنیم:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
...
}
از پنج خط کد ابتدا، برای تعریف فضای های نام زیر درکدهای سی شارپ استفاده می شود و باید تمام فضاهای نام در این فایل بدون طبقه بندی(classification) مورد استفاده قرار گیرند:
- System
- System.Collections.Generic
- System.Linq
- System.Text
- System.Threading.Tasks
فضای نام System یک فضای نام ریشه ای برای برنامه های فریم ورک دات نت محسوب می شود و حاوی تمام قابلیت های پایه ای است که ما به آنها برای برنامه های کنسول نیاز داریم. دیگر فضای نام های ذکر شده، اغلب اوقات در برنامه های کنسول مورد استفاده قرار می گیرند؛ به همین خاطر در اینجا مورد استفاده قرار می گیرند. همچنین به خاطر داشته باشید که یک فضای نام نیز برای خود کدهای برنامه تعریف شده است، یعنی خود ConsoleApplication1 .
کلمه ی کلیدی using static در سی شارپ 6 معرفی شده است. این کلمه کلیدی به ما امکان می دهد اعضای استاتیک(static members) مستقیماً در میدان دید(scope) یک برنامه سی شارپ گنجانده شوند. بعنوان مثال، هردوی تمرین های عملی درون این فصل، از متد System.Console.WriteLine() که بخشی از کلاس استاتیک System.Console است، استفاده کرده اند. توجه کنید که در این مثال ها، ضروری است که کلاس Console با متد WriteLine() ترکیب شود. وقتی که فضای نام using static System.Console به لیست فضای نام ها اضافه شود، دسترسی به متد WriteLine() دیگر نیازی به اضافه کردن نام کلاس استاتیک مذکور ندارد. تمام کدهای مثال که به کلاس استاتیک System.Console نیاز دارند از این نقطه به بعد از کلمه کلیدی using static System.Console استفاده می کنند.
تمرین ها
تمرین 3.1 : در کد زیر، چگونه می توانیم در داخل کدی که در فضای نام fabulous قرار دارد به نام great رجوع کنیم؟
namespace fabulous
{
// fabulous کد درون فضای نام
}
namespace super
{
namespace smashing
{
// اینجا تعریف می شود great نام
}
}
پاسخ:
super.smashing.great
تمرین 3.2 : کدام یک از گزینه های زیر یک نام متغیر قانونی نیست؟
- myVariableIsGood
- 99Flake
- floor_
- time2GetJiggyWidIt
- wrox.com
پاسخ: شماره 2، زیرا با یک عدد شروع شده است. و شماره 5، زیرا حاوی یک نقطه است.
تمرین 3.3 : آیا اگر بخواهیم رشته ی زیر را در یک متغیر رشته ای(string) قرار دهیم، برای آن بسیار بزرگ است؟ اگر چنین است، توضیح دهید چرا؟
"supercalifragilisticexpialidocious"
پاسخ: نه، برای سایز یک رشته در یک متغیر رشته ای قرار می گیرد محدودیت نظری وجود ندارد.
تمرین 3.4 : با در نظر گرفتن تقدم عملگرها، مراحل مربوط به محاسبه عبارت زیر را فهرست کنید:
resultVar += var1 * var2 + var3 % var4 / var5;
پاسخ: در اینجا، عملگرهای * و / بیشترین تقدم را دارند. و پس از آن، عملگر % و + و در نهایت =+ تقدم دارند. تقدم عملگرها در این تمرین را می توانیم با استفاده از پرانتزها به صورت زیر مشخص کنیم:
resultVar += (((var1 * var2) % var3) + (var4 / var5));
تمرین 3.5 : یک برنامه ی کنسول بنویسید که چهار مقدار int را از کابر بگیرد و حاصلضرب آنها را به او نمایش دهد. راهنمایی: به یاد دارید که از دستور Convert.ToDouble() برای تبدیل ورودی از کنسول به یک مقدار double استفاده شده. برای تبدیل یک رشته به یک int می توانیم از فرمان معادل Convert.ToInt32() استفاده کنیم.
پاسخ:
using static System.Console;
using static System.Convert;
static void Main(string[] args)
{
int firstNumber, secondNumber, thirdNumber, fourthNumber;
WriteLine("Give me a number:");
firstNumber = ToInt32(ReadLine());
WriteLine("Give me another number:");
secondNumber = ToInt32(Console.ReadLine());
WriteLine("Give me another number:");
thirdNumber = ToInt32(ReadLine());
WriteLine("Give me another number:");
fourthNumber = ToInt32(ReadLine());
WriteLine($"The product of {firstNumber}, {secondNumber}, " +
$"{thirdNumber}, and {fourthNumber} is " +
$"{firstNumber * secondNumber * thirdNumber * fourthNumber}.");
}
توجه کنید که در اینجا از فرمان Convert.ToInt32() استفاده شده است که در این فصل در مورد آن توضیحی داده نشده است.
کتاب آموزش سی شارپ, آموزش برنامه نویسی, آموزش سی شارپ
- بازدید: 555
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.