فضاهای نام روشی برای مدیریت کد نویسی هستند. برای مثال آن ها ایجاد شده اند تا تداخلی بین نام های توابع در برنامه شما رخ ندهد. این مساله در پروژه های بزرگ خود را نشان می دهد و ممکن است دو آیتم در یک پروژه نام های یکسانی را پیدا کنند. بدین وسیله این شانس تصادم و تداخل کاهش پیدا می کند. برای ایجاد یک فضای نام به صورت زیر عمل می شود:
namespace anyName { ……..
Class anyClassName { ………. }
…….
}
یکی از فضاهای نام پایه ای در دات نت فریم ورک ، فضای نام System می باشد. برای استفاده از آن می توان از کد زیر کمک گرفت :
سی شارپ عناصری را که به کار می گیرد همانند اعداد و کاراکترها ، به صورت نوع ها (Types) طبقه بندی می کند. این انواع شامل موارد زیر می شوند : نوع های پایه ایی از پیش تعریف شده مانند اعداد و غیره. نوع های تعریف شده توسط کاربر که شامل STRUCT ها و ENUM ها می شوند.
نحوه ی تعریف متغیرها از نوع های پایه ایی از پیش تعریف شده : همان طور که می دانید از متغیرها برای نگه داری اطلاعات استفاده می شود. در سی شارپ ابتدا نوع متغیر و سپس نام متغیر و در آخر یک سمی کولون بکار برده می شود. برای مثال :
int a;
که در این جا متغیر a بعنوان یک متغیر حاوی اعداد صحیح تعریف شده است. نکته ی مهمی که در اینجا حائز اهمیت است ، مقدار دهی اولیه ی متغیرها می باشد. در غیر این صورت کامپایلر سی شارپ برنامه را بایک خطا متوقف می کند. دلیل این امر هم این است که از استفاده از متغیرهای بدون مقدار در طول برنامه جلوگیری شود تا میزان خطاهای در حین اجرا کاهش یابد.
نوع های داده ای پایه ی زیر در در سی شارپ به صورت پیش فرض مهیا هستند:
object : نوعی است نامحدود که می تواند تمام انواع دیگر را نیز شامل شود. مثال :
object = null;
string : رشته ؛ در این جا یک رشته توالی کاراکترهای یونیکد می باشد. مثال :
در طی سلسله مقالاتی می خواهیم با C# بیشتر آشنا شویم. فرض این مقالات بر این است که آشنایی مختصری با زبان های برنامه نویسی دارید ، هر چند کار ما تقریباً از صفر شروع می شود و هدف آن سادگی هر چه بیشتر است.
C# از دو زبان C++ و Java متولد شده است! حاوی بسیاری از جنبه های C++ می باشد اما ویژگی های شیء گرایی خودش را از جاوا به ارث برده است.
C# اگرچه از C++ گرفته شده است اما یک زبان “خالص” شیء گرا (Object oriented) می باشد. هر دو زبان یاد شده جزو زبان های هیبرید محسوب می شوند اما طراحان C# این مورد را به اندازه ی C++ مهم تلقی نکرده اند. یک زبان هیبرید اجازه ی برنامه نویسی با شیوه های مختلف را میسر می کند. دلیل این که C++ هیبرید است ، این است که قرار بوده تا با زبان C سازگار باشد و همین امر سبب گردیده تا بعضی از جنبه های C++ بسیار پیچیده شوند.
مایکروسافت در مصاف با جاوا، بدنبال ارائه یک زبان کامل بود که سایه جاوا را در میادین برنامه نویسی کم رنگ تر نماید. شاید بهمین دلیل باشد که #C را ایجاد کرد. شباهت های بین دو زبان بسیار چشمگیر است. مایکروسافت در رابطه با میزان استفاده و گسترش زبان فوق بسیار خوشبین بوده و امیدوار است بسرعت زبان فوق گستردگی و مقبولیتی به مراتب بیشتر از جاوا را نزد پیاده کنندگان نرم افزار پیدا کند.
با توجه به نقش محوری این زبان، از آن بعنوان مادر زبانهای برنامه نویسی در دات نت نام برده می شود. مورد فوق به تنهائی، می تواند دلیل قانع کننده ای برای یادگیری این زبان باشد، ولی دلایل متعدد دیگری نیز وجود دارد که در ادامه به برخی از آنها اشاره می گردد.
مطرح شدن بعنوان یک استاندارد صنعتی انجمن تولیدکنندگان کامپیوتر اروپا (ECMA) زبان #C را در سوم اکتبر سال ۲۰۰۱ بعنوان یک استاندارد پذیرفته (ECMA-334) و بدنبال آن تلاش های وسیعی برای کسب گواهی ISO نیز انجام شده است. زبان فوق در ابتدا توسط شرکت مایکروسافت و بعنوان بخشی از دات نت پیاده سازی و بلافاصله پس از آن توسط شرکت های اینتل، هیولیت پاکارد و مایکروسافت مشترکا، جهت استاندارسازی پیشنهاد گردید.
کنترل گريد يکي از قوي ترين و پرکاربرد ترين کنترل هاي کانتينر مي باشد. به طور حتم مي توان گفت که در بيش از 90 درصد موارد، شما از اين کنترل براي طراحي واسط کاربري برنامه هاي خود استفاده خواهيد کرد. اين کنترل داراي خواص زيادي مي باشد که شما را در طراحي واسط هاي کاربري پيچيده ياري مي کند.
همانطور که تاکنون نيز شاهد بوده ايد، اين کنترل به صورت پيش فرض، کنترل کانتينر اصلي در هر پنجره اي قرار داده شده است که در مثال هاي قبلي ما ر حسي نياز آن را تغيير داده ايم و متناسب با نياز خود آن را تعريف کرده ايم.
مهمترين خواص کنترل گريد، خواص مربوط به تعاريف سطر و ستون آن مي باشد. با تعريف سطر ها وستون ها، مي توانيد مجموعه اي از سلول ها را در اين کنترل به وجود آوريد. عناصري که بر روي اين کنترل قرار ميگيرند، هر يک مي توانند در يک سلول و يا بر حسب تعريفي که شما براي آن مشخص مي کنيد، در دو و يا بيش از دو سلول قرار گريد. تعريف کنترل گريد در ساده ترين حالت، (تنها داراي يک سطر و يک ستون) به صورت زير مي باشد.
تعريف فوق که در ابتداي ايجاد هر پنجره جديدي،د رون کد XAML آن پنجره مشاهده مي کنيد، يک کنترل گريد داراي يک سطر و ستون براي شما ايجاد مي کند. همانطور که قبلا نيز اشاره شد، اکثر کنترل ها در حالت پيش فرض، داراي خواص HorizontalAlignment و VerticalAlignment هستند که به صورت پيش فرض داراي مقدار Stretch مي باشند. با توجه به اين نکته چنانچه شما يک دکمه مانند Button را به توسط دستور زير :
به کنترل گريد تعريف شده در کد قبل اضافه کنيد، کل فضاي گريد به کنترل Sample Button تعلق خواهد گرفت.
اين موضوع به اين دليل است که کنترل گريد سعي در اختصاص دادن کل فضاي موجود به کنترل هاي دروني آن مي باشد و نيز کنترل Button همانطور که گفته شد، داراي خواص HorizontalAlignment و VerticalAlignment با مقدار Stretch مي باشد که باعث مي شود، از حداکثر فضاي موجود بر روي کنترل والد خويش که به آن اختصاص داده شده است استفاده نمايد. کد زير همراه با شکل نشان دهنده مطالب گفته شده مي باشد.
همانطور که در شکل فوق مشاهده مي شود، کنترل Button کل فضاي موجد گريد و در نتيجه کل فضاي پنجره را در اختيار گرفته است. ( زيرا کنترل گريد نيز کل فضاي پنجره را در اختيار گرفته است)
سطر ها وستون ها در کنترل گريد
از شکل فوق، مي توان نتيجه گرفت که کنترل گريد به آن صورتي که مطرح شد، داراي کارايي بالايي نمي باشد. زماني اين کنترل مي تواند به طور موثر و کارا در توليد واسط هاي کاربري شما موثر واقع شود که بتوانيد براي آن سطر ها و ستون هاي دلخواه خود را تعريف کنيد و از آن ها به صورت موثر و دلخواه استفاده نماييد. با تعريف سطر ها و ستون ها براي کنترل گريد، مي توانيد آن را به تعداد سلول دلخواه خود تقسيم کرده و کنترل هاي مورد نظر خود را درون آن سلول ها قرار دهيد.
هر کنترلي مي توانيد درون يک يا چند سلول قرار بگيرد و هر سلول با استفاده از کنترل هاي کانتينر مي تواند شامل يک يا چند کنترل باشد. در قسمت قبلي و در زماني که کنترل UniformGrid را توضيح مي دادم، اشاره شکردم که در آن کنترل نمي توانيد بر محل قرار گيري کنترل هاي فرزند، نظارت داشته باشيد و سلول هاي دلخواه خود را به کنترل هاي دلخواه خود، نسبت دهيد.
در واقع اين کنترل UniformGrid است که براي شما تصميم مي گيريد و کنترل هاي شما را بر اساس ترتيب تعريف شده آ ن ها در سلول هاي خود قرار مي دهد.
اما در کنترل Grid همه چيز در اختيار شما خواهد بود. مي توانيد مشخص کنيد که کدام کنترل در چه سلولي قرار گيرد، نيز مشخص کنيد که يک کنترل تا چند سطر و ستون را مي تواند احاطه کند و امکانات ديگري که در قسمت هاي بعدي به آن ها اشاره خواهد شد.
حدود يك سال است كه از ارائه شدن نهايي سي شارپ نسخه 3.0 – در قالب ويژوال استوديو 2008 – مي گذرد. زباني كه با نام كد (COOL (C Style Object Oriented Language وارد جهان برنامه نويسي شد با پشت سر گذاشتن سه نسخه و هشت سال از عمر خود، اينك به سمت نسخه اي ديگر گام برداشته است. پس از كنفرانس PDC 2008 كه 30-27 اكتبر سال جاري در لس آنجلس برگزار شد، سخنراني آندرس هلسبرگ معمار و سرپرست اصلي تيم طراح سي شارپ، پرده از ويژگي هاي جديد اين زبان كه تحت عنوان C# 4.0 ارائه خواهد شد، برداشت. در سري مقالات C# 4.0، نگاهي به آينده سعي بر آن خواهيم داشت تا اين ويژگي ها را معرفي كنيم.
چهارچوب كلي C# 4.0
نسخه جديد كه هنوز تاريخ قطعي انتشار آن مشخص نيست، سال 2010 به همراه ويژوال استوديو 2010 و دات نت فريم ورك 4.0 ارائه خواهد شد. پس از كنفرانس PDC 2008 نخستين (CTP (Community Technology Preview محصول Visual Studio 2010 به عنوان Virtual Image در اختيار عموم قرار گرفت. (لينك دانلود) اگر به مستند منتشر شده New features in CSharp 4.0 مراجعه كنيد، چهارچوب كلي ويژگي هاي جديد به شرح زير معرفي شده اند:
Dynamic
Named and Optional Arguments
Features for COM interop
Variance
مهم ترين نوع آوري در سي شارپ 4.0 نوع دايناميك آن خواهد بود. اين ويژگي را در مقاله سوم مورد بحث و بررسي قرار خواهيم داد. اشاره اي داشته باشيم كه هر آنچه كه بيان آن توسط انواع موجود در زبان سي شارپ و نيز نوع static ممكن نباشد، از نوع dynamic است. دايناميك يك نوع مستقل بوده كه در هيچ سلسله اي از اشياء طبقه بندي نمي شود! يعني از هيچ شي ءي ارث بري نمي كند و شي ءي قادر به ارث بري از آن نيست. اين نوع امكان اجراي اسكريپت زبان هايي چون Python و Ruby را به راحتي هر چه تمام تر در بستر سي شارپ و در كل در بستر دات نت فراهم خواهد كرد.
ويژگي COM interop برقراري ارتباط راحت تر و بدون درگيري جانبي با اشياء COM را فراهم خواهد كرد. اگر تاكنون برنامه نويسي COM را تجربه كرده باشيد، حتما با پيچيدگي و درگيري هاي زيادي كه در اين پلتفرم وجود دارد، آشنا هستيد.