نویسنده : بهرام محمدپور - ساعت ۱:۱٥ ‎ق.ظ روز چهارشنبه ٢۳ دی ۱۳۸۸


Namespace چیست؟
یک نکته مهم که در زمان استفاده از NET Framework. باید به آن توجه داشت آن است که فضانام (namespace یا نامکده) ها در ساختمان برنامه کاربردی قرار دارند. فضانام یک طرح نامگذاری منطقی برای گروه بندی کلاس های مرتبط است. این طرح مانع از آن می شود تا کلاس هایی که برای متدها و خصوصیات از یک شناسه یکسان استفاده می کنند تداخل داشته باشند.
مثلا NET Framework. برای گروه بندی تایپ ها به مقوله های منطقی عملکرد، از قبیل چارچوب برنامه کاربردی ASP.NET، از یک طرح نامگذاری سلسله مراتبی استفاده می کند. ابزارهای طراحی از فضانام ها با هدف تسهیل مرور و ارجاع تایپ ها در برنامه بهره برداری می کنند. مثلا فرض کنید در حال نوشتن کد زیر هستید:

Public Class NewClass
[Procedures and Functions]
End Class

Public Class NewClass
[Procedures and Functions]
End Class


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


Namespace One
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace

Namespace Two
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace

در این کد برخوردی بین دو کلاس با نام NewClass وجود ندارد چون هر کدام در یک فضانام جداگانه قرار داده شده است. کلاس اول را می توان با استفاده از ترکیب One.NewClass صدا زد، حال آنکه کلاس دوم را می توان با استفاده از ترکیب Two.NewClass صدا زد.
شما می توانید در فضانام های خود از یک ساختار سلسله مراتبی استفاده کنید. قرار دادن اشیاء مشابه تحت زیرعنوانها در یک فضانام مشترک تشخیص هدف فضانام را آسانتر می کند، و در عین حال باعث می شود برنامه به مراتب شئ گراتر شود.
برای توضیح فضانام می توان ساختار فایل و دایرکتوری (کشو، فولدر) در یک کامپیوتر را در نظر گرفت. در این مثال کلاس ها به مثابه فایل ها و فضانام ها مانند دایرکتوری ها هستند. بدیهی است همانگونه که می توانیم دایرکتوریهای تو در تو داشته باشیم، فضانام ها هم در حالیکه کلاس ها را در خود جای داده اند می توانند بصورت تو در تو باشند.
فضانام ها در ساخت برنامه های کاربردی ASP.NET نقش مهمی ایفا می کنند. خوشبختانه لازم نیست برای همه اشیایی که می توانند به وسیله صفحات ASP.NET مورد استفاده قرار بگیرند سیستم طبقه بندی فضانام ایجاد کنید. مایکروسافت این مساله را برای شما حل کرده است. دو فضانام ریشه، و فضانامهای فرزند آنها را می توان وارد صفحات ASP.NET خود کرد. اولی System نامیده می شود، و دومی Microsoft نام دارد. این فضانامها با جزئیات بیشتر در ادامه مورد بحث قرار گرفته اند.
فضانام System
فضانام System فضانام اصلی برای ساخت ASP.NET و همه برنامه های کاربردی دیگر مبتنی بر NET Framework. است. هر چیزی که در برنامه کاربردی شما قابل انجام باشد از طریق فضانام System کنترل می شود. به عنوان مثال کنترل آرایه، عملیات ریاضی، و تبدیل نوع داده ها از طریق فضانام System و فضانامهای فرزند آن اداره می شوند. ۹ فضانام پیش فرض (فضانام System و ۸ فرزند آن) وجود دارند که به صورت خودکار به صفحات ASP.NET اضافه می شوند:
• System
• System.ComponentModel.Design
• System.Data
• System.Drawing
• System.Web.SessionState
• System.Web
• System.Web.UI
• System.Web.UI.WebControls
• System.Web.UI.HTMLControls
هشت فضانام (بجز فضانام System) در زمان ساخت Visual Studio.NET یا VS.NET بطور خودکار به صفحات ASP.NET وارد می شوند. این فضانام ها در زیر به اختصار شرح داده شده اند.
• System.ComponentModel.Design: دربرگیرنده کلاس هایی است که می توان از آنها برای طراحی پشتیبانی سفارشی اجزا و زمان طراحی و دسترسی به سرویس های تامین شده توسط معماری NET Framework. استفاده کرد.

• System.Data: امکان دسترسی به کلاس ها و رابطهایی را فراهم می کند که معماری ADO.NET را برای دسترسی به داده های عمومی تشکیل می دهند.

• System.Drawing: دربرگیرنده کلاس ها و رابطهایی است که عملکرد گرافیکی اولیه را تامین می کنند. فضانام System.Drawing نیز از طریق فضانام System.Drawing.Drawing2D و System.Drawing.Imaging عملکرد پیشرفته تری فراهم می کند.

• System.Web: کلاس ها و رابطهایی تامین می کند که ارتباط مرورگر/سرویس دهنده را امکان پذیر می کنند. این فضانام دربرگیرنده کلاس HTTPRequest (فراهم کننده اطلاعات وسیعی درباره درخواست HTTP جاری)، کلاس HTTPResponse (فراهم آورنده امکان دسترسی به فرآیندها و یوتیلیتی های سمت سرویس دهنده) است.

• System.Web.SessionState: فراهم کننده کلاس ها و متدهایی برای مدیریت وضعیت جلسات کاری می باشد.

• System.Web.UI: فراهم کننده کلاس ها و رابطهایی برای رابط واسط کاربر برنامه کاربردی ASP.NET است که موجب می شوند برنامه کاربردی با سطوح مختلف صفحه، ارتباط برقرار کند. کلاس اصلی این فضانام، کلاس Page می باشد که دربرگیرنده همه خصوصیتها، متدها، و سازنده های صفحه است. اشیاء اصلی Active Server Page زیر خصوصیتهایی در کلاس Page هستند: Application ،Response ،Request ،Server و Session.

• System.Web.UI.HTMLControls: کلاس هایی برای عناصر HTML استاندارد، شامل فرم ها، کنترل های ورودی، آنکور، جداول، قسمتهای متنی، و غیره فراهم می کند. این کنترلها همانند تگهای عادی HTML هستند با این تفاوت که داری دو صفت runat="server" و id="controlname" می باشند.

• System.Web.UI.HTMLControls: برای کنترلهای سرویس دهنده ای که شبیه کنترلهای HTML هستند ولی انعطاف پذیری بیشتر و عملکرد پیچیده تری دارند کلاس هایی را تامین می کند.
برخی فضانام های مهم و پرکاربرد دیگر به شرح زیر می باشند.
• System.IO: دربرگیرنده رابطها و کلاس هایی است که امکان خواندن و نوشتن همگام و غیرهمگام فایل ها و جریانهای داده را فراهم می کنند.

• System.Data.OleDb: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به یک منبع داده از طریق ADO را فراهم می کند.

• System.Data.SqlClient: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به داده های خاص Microsoft SQL Server از طریق ADO را فراهم می کند.

• System.Web.Security: امکان دسترسی به کلاسها و رابطهای مخصوص امنیت برنامه کاربردی ASP.NET را فراهم می کند. دستیابی به رمزنگاری، مجوزها، و تنظیمات خط مشی برنامه کاربردی در این فضانام قرار می گیرند.

• System.XML: امکان دسترسی به کلاسها و رابطهای مخصوص پردازش اسناد XML را فراهم می کند.
فضانام Microsoft
علاوه بر فضانام System که در چارچوب NET. یافت می شود، مایکروسافت چند فضانام اضافه کرده است که برای زبان برنامه سازی ای که می خواهید از آن در برنامه کاربردی خود استفاده کنید عملکرد لازم را تامین می کنند. ممکن است شما بصورت مستقیم با این فضانام کاری نداشته باشید.
• Microsoft.VisualBasic: این فضانام محتوی CLR یا زمان اجرای Visual Basic.NET است. از این زمان اجرا با زبان Visual Basic.NET استفاده می شود. این فضانام همچنین دربرگیرنده کلاس هایی است که از کامپایل و تولید کد با استفاده از زبان ویژوال بیسیک پشتیبانی می کنند.

• Microsoft.CSharp: این فضای نام دربرگیرنده کلاس هایی است که از کامپایل و تولید کد با استفاده از زبان #C پشتیبانی می کنند.

• Microsoft.JScript: این فضای نام دربرگیرنده کلاس هایی است که از کامپایل و تولید کد با استفاده از زبان JScript پشتیبانی می کنند.

• Microsoft.Win32: کلاسها و رابطهای مورد نیاز برای کار با کلیدها و hiveهای رجیستری را تامین می کند.
با وجود آنکه فضانام ها از قبل تامین می شوند، می توانید برای استفاده از برنامه کاربردی ASP.NET فضانام های خود را ایجاد کنید. برای هر کلاس ایجاد شده توسط سازنده یک فضانام تولید می شود.

استفاده از فضانام ها در صفحات ASP.NET
دو راه برای افزودن فضانام به برنامه کاربردی ASP.NET وجود دارد. از شبه دستور (Directive) صفحه Import@ برای صفحات ASPX و از کلمه کلیدی Imports برای افزودن فضانام به برنامه codebehind مربوطه در ویژوال بیسیک استفاده می شود و برای زبان #C از دستور using استفاده می گردد. قطعه برنامه زیر ترکیب نحوی برای افزودن فضانام System.Web.UI.WebControls به صفحه ASP.NET شما است.

<%@ Import namespace = "System.Web.UI.WebControls" % >

همین فضانام را در قسمت codebehind بصورت زیر به برنامه اضافه می کنیم.


Imports System.Web.UI.WebControls (vb.net )
using System.Web.UI.WebControls; (C#)
( به تفاوت Import و Imports دقت کنید )

در صورتیکه می خواهید چند فضانام را به صفحه ASP.NET خود و یا صفحه codebehind اضافه کنید باید هرکدام را جداگانه اضافه کنید. بعنوان مثال، برای افزودن فضانام System.Web.UI.HTMLControls به صفحات با فضانام های موجود، درست بعد از آخرین عبارت مهم به خط بعد بروید و Imports System.Web.UI.HTMLControls را اضافه کنید. به محض آنکه .Imports System را تایپ کنید، VS.NET فهرستی از فضانام ها را ظاهر می کند، و می توانید به سادگی فضانام مورد نظر را با ماوس برگزینید. امتیاز این فهرست آن است که مجبور نیستید همه فضانام های NET. را از حفظ بدانید، بلکه می توانید به آسانی از فهرست انتخاب کنید. این ویژگی با عنوان Intellisense شناخته می شود. برای صفحات ASP.NET از این ترکیب استفاده کنید:

< %@ Import namespace = "System.Web.UI.WebControls" % >
< %@ Import namespace = "System.Web.UI.HTMLControls" % >
< %@ Import namespace = "namespace name" % >
...

برای صفحات codebehind ویژوال بیسیک از این ترکیب استفاده کنید:

Imports System.Web.UI.WebControls
Imports System.Web.UI.HTMLControls
Imports namespace
...