دو شنبه ۱۶ شهريور ۱۳۸۸, ۰۹:۲۹
ويژوال بيسيك دات نت 2 در بر گيرنده چند قابليت هيجان انگيز ،سودمند و مهم است كه مسلما مورد توجه برنامه نويسان علاقمند به اين زبان قرار خواهد گرفت .قابليت اول اين است كه اگر معتقد بوديم كه زبان هاي ويژوال بيسيك دات نت و سي شارپ حدود 90 درصد مشابه يكديگرند،اكنون همان اندك تفاوت ميان قابليت هاي اين دو در نسخه دوم دات نت از ميان رفته است و به جرات مي توان گفت هيچ تفاوت مهمي ميان اين دو زبان وجود ندارد؛جز اينكه برخي برنامه نويسان گرامر و Syntax زبان سي شارپ را كه (شباهت زيادي به جاوا دارد)بيشتر مي پسندند.
دو مورد از تفاوتهاي جزئي اين دو زبان كه در نسخه اول دات نت وجود داشت و اينك به مجموعه قابليت هاي ويژوال بيسيك افزوده شده است عبارتند از:امكان مستند سازي سورس كد با استفاده از XML و قابليت Overloading Operator يا تعريف عملگر هاي اضافي.
XML Documentation
به كمك اين قابليت مي توانيد اجزاي مختلف سورس كد برنامه خود را با فرمت XML مستند كنيد. اين مستندات قطعه قطعه بعدا مي توانند يك سند راهنماي كامل در باره سورس كد بسازد. ويژگي مذكور در ويژوال سي شارپ 2003 وجود دارد، اما ويژوال بيسيك2003 فاقد آن است.
اكنون اين فابليت در نسخه جديد افزوده شده است. استفاده از اين فابليت بسيار آسان است. مثلا اگر تابعي بنويسيد و بالاي اولين خط آن (قبل از نام تابع) سه بار كاراكتر كوتيشن را تايپ كنيد و سپس Enter كنيد،با توجه به نام تابع و پارامتر هاي آن يك قطعه راهنماي خالي با فرمت XML درج مي شود كه مي توانيد آن را اصلاح و كامل كنيد.
يكي ديگر از قالبيت هاي سودمندي كه ويژوال بيسيك 2003 از آن محروم بود،امكان تعريف كردن عملگرهاي عمومي رياضي (4 عمل اصلي )، عملگر هاي منطقي (NOT , OR, AND) و عملگر هاي مقايسه اي (مثل >,<,=) براي انواع داده ها،كلاس ها و اشياي تعريف شده توسط برنامه نويس بود. چنان كه مي دانيد در حالت عادي از عملگري مانند + فقط مي توان براي جمع زدن دو عدد يا متغيير عددي استفاده كرد.
اما قالبيت Operator Overloading كه در دل منطق شي گرايي پلتفرم دات نت وجود دارد،امكان پيوند دادن دو مقدار رشته اي را از طريق اين عملگر فراهم مي سازد. مثلا مي توانيد يك متغير رشته اي با مقدار I am را با يك متغير ديگر با مقدار a developer به وسيله علامت + جمع بزنيد. در اين صورت آن عبارت به صورت I am a developer خواهد بود. اين ويژگي در برخي از كلاس هاي ديگر چارچوب دات نت نيز وجود دارد. اما متاسفانه در VB.NET برنامه نويس نمي توانست براي كلاس ها و اشيايي كه خود مي سازد،از اين قابليت استفاده كند. اين محدوديت در VB.NET 2.0 برطرف شده است. مثلا شما مي توانيد يك نوع داده جديد(Type) تعريف كنيد كه شامل يك آرايه دو بعدي باشد(مثل يك نقطه در فضاي برداري x-y) و براي اين كلاس يك عملگر + مخصوص تعريف كنيد كه وقتي دو متغير از اين نوع را با هم جمع مي زنيد،مقدارهاي بعد اول (X)با هم و مقدارهاي بعد دوم (Y) نيز به طور جداگانه با هم جمع شوند.
Reg – Free COM
قابليت بسيار مهم و جالبي كه به ويژوال بيسيك 2005 افزوده شده است،تكنيك Reg – Free COM نام دارد كه حتما بسياري از برنامه نويسان دات نت منتظر آن بودند.
اغلب برنامه نويسان ويژوال بيسيك6 به خاطر مي آوردند كه يكي از دردسرهاي مهم برنامه نويسي براي سيستم عامل ويندوز ،ساختن برنامه نصب (Installation) و ثبت كامپوننت هاي عناصر اصلي برنامه در رجيستري ويندوز بود. دو كابوس هميشگي برنامه نويسان ،نحوه نصب عناصر ActiveX وDLL هاي حاوي اشيا COM وCOM+ بود.
اين مشكل چندان اهميت داشت كه برنامه نويسان به شوخي نام DLL Hell يا جهنم DLL را بر آن نهاده بودند. خوشبختانه پلتفرم دات نت اين مشكل را به طور عمده حل كرد؛زيرا به دليل حضور چهارچوب دات نت در سيستم عاملي كه قرار است يك برنامه نوشته شده با Visual Studio.NET روي آن اجرا شود، ديگر نيازي به رجيستر كردن كامپوننت ها و اشياي برنامه نيست و عمل نصب برنامه خيلي ساده با كپي كردن فايل هاي نرم افزار داخل پوشه روي هارد ديسك انجام مي شود.
با اين حال عيب كار در اينجا بود كه برنامه نويسي كه با هزار زحمت توانسته بودند يك شي COM يا ActiveX بي درد سر و بي عيب بسازد،در صورت مهاجرت به پلتفرم دات نت مجبور بودند يا به كلي از خير اين اشيا استفاده مي كردند،همچنان ناگزير از نصب اين اشيا به روش قديمي (به رقم نصب آسان ساير قسمت هاي ساخته شده بر اساس چارچوب دات نت ) بودند.
اكنون ويژوال بيسيك 2005 با معرفي تكنيك Reg –Free COM اين معضل را به طور عمده از پيش روي برنامه نويسان برداشته است. به كمك اين تكنيك مي توانيد اغلب اشياي COM و ActiveX سابق خود را با يك اينترفيس دات نتي بپوشانيد. به طوري كه بتوان آن ها را مانندDLL هاي توليد شده بر اساس دات نت خيلي ساده داخل پوشه برنامه كپي كرد و بدون نياز به ثبت در ريجيستري ويندوز مورد استفاده قرار داد. براي استفاده از اين قابليت كافي است در قسمت Refrence هاي پروژه به DLL حاوي ActiveX يا COM ارجاعي تعريف كنيد. سپس در پنجره Properties گزينه Isolated را معادل True قرار دهيد. البته اين قابليت محدوديت هايي هم دارد:يكي اينكه به ويندوز XP يا نسخه هاي بالا تر نياز دارد. ديگر اينكه فقط براي كامپوننت هاي in-proccess قابل استفاده است . اين قابليت همچنين براي آن دسته از اشياي COM كه جزيي از سيستم عامل ها هستند كار نمي كند و نهايتا اين كه نمي توانيد از قابليت مذكور براي آن دسته از اشياي COM و ActiveX كه به حضور نرم افزارهاي بزرگي مثل Word وابسته هستنداستفاده كنيد. اين گونه ActiveX ها فقط وقتي كار مي كنند كه نرم افزار مربوطه (مثلا اكسس) قبلا روي كامپيوتر نصب و رجيستر شده باشد.
My Namespace
يكي از اقداماتي كه مايكروسافت براي آسان كردن برنامه نويسي با ويژوال بيسيك دات نت يا به قول مايكروسافت تحقق ايده RAD انجام داده، افزون يك Namespace با نام My است. به كمك اين Namespace مي توانيد به برخي از قابليت هاي پر مصرف سيستم عامل ويندوز مانند دسترسي به فايل سيستم ،پخش صوت ،امنيت و تنظيمات سيستم دسترسي سريع داشته باشيد. اين Namespace شامل اجزاي اصلي زير است:
Application : امكانات مختلفي در اختيار برنامه نويس قرار مي دهد. مثلا مي تواند داخل سيستم EventLog ويندوز بنويسد و بخواند.
Computer :دسترسي آسان و سريع به برخي قسمت هاي كامپيوتر مانند فايل سيستم،ماوس،صفحه كليد،ساعت،كليپ بورد،صوت ،رجيستري،شبكه،پورت سريال و چند بخش ديگر را فراهم مي كند.
Forms : از طريق اين كلكسيون برنامه نويسان مي توانند به instanceهاي فرم هايي كه ساخته اند دسترسي سريع داشته باشند.
Resources : اين كلكسيون يك دسترسي مستقيم به كلاس هاي زير را فراهم مي كند.
User : اين شي درباره وضعيت امنيتي كاربر كنوني سيستم اطلاعات ميدهد. با اين كلاس مي توانيد بفهميد هم اكنون كدام كاربر با چه سطح دسترسي وارد سيستم شده است. قطعه كد 2 چند مثال از كاربرد My را نشان ميدهد. قسمت اول داخل تابع Form1Load تمام پارتيشن هاي هارد ديسك را مرور مي كند و ميزان فضاي خالي آن ها را نشان مي دهد.
قسمت دوم كنترل مي كند كه نام كاربر فعلي چيست و آيا عضو گروه Administrator هست يا نه . قسمت سوم هم يك فايل صوتي را پخش مي كند.از آنجا كه My فقط يك Namespace است ،مي توانيد با ايجاد كتابخانه هاي جديد آن را توسعه دهيد و قابليت ها،كلاس ها و كلكسيون هاي جديدي به آن اضافه كنيد. بنابراين My در واقع نوعي تفكر برنامه نويسي است. تفكري كه بر اساس آن ،كلاس ها و ديگر قابليت هاي زبان پر كاربرد ويژوال بيسيك دات نت را مي توانيد دم دست خود بگذاريد تا استفاده از آن ها در سراسر سورس كد سريع و آسان باشد.
دو مورد از تفاوتهاي جزئي اين دو زبان كه در نسخه اول دات نت وجود داشت و اينك به مجموعه قابليت هاي ويژوال بيسيك افزوده شده است عبارتند از:امكان مستند سازي سورس كد با استفاده از XML و قابليت Overloading Operator يا تعريف عملگر هاي اضافي.
XML Documentation
به كمك اين قابليت مي توانيد اجزاي مختلف سورس كد برنامه خود را با فرمت XML مستند كنيد. اين مستندات قطعه قطعه بعدا مي توانند يك سند راهنماي كامل در باره سورس كد بسازد. ويژگي مذكور در ويژوال سي شارپ 2003 وجود دارد، اما ويژوال بيسيك2003 فاقد آن است.
اكنون اين فابليت در نسخه جديد افزوده شده است. استفاده از اين فابليت بسيار آسان است. مثلا اگر تابعي بنويسيد و بالاي اولين خط آن (قبل از نام تابع) سه بار كاراكتر كوتيشن را تايپ كنيد و سپس Enter كنيد،با توجه به نام تابع و پارامتر هاي آن يك قطعه راهنماي خالي با فرمت XML درج مي شود كه مي توانيد آن را اصلاح و كامل كنيد.
``` <summary>
`````` <summary>
``` <param name="param”> </param>
``` <remarks></remarks>
Sub Testsub(ByVal param1 As Integer)
End Sub
Operator Overloadingيكي ديگر از قالبيت هاي سودمندي كه ويژوال بيسيك 2003 از آن محروم بود،امكان تعريف كردن عملگرهاي عمومي رياضي (4 عمل اصلي )، عملگر هاي منطقي (NOT , OR, AND) و عملگر هاي مقايسه اي (مثل >,<,=) براي انواع داده ها،كلاس ها و اشياي تعريف شده توسط برنامه نويس بود. چنان كه مي دانيد در حالت عادي از عملگري مانند + فقط مي توان براي جمع زدن دو عدد يا متغيير عددي استفاده كرد.
اما قالبيت Operator Overloading كه در دل منطق شي گرايي پلتفرم دات نت وجود دارد،امكان پيوند دادن دو مقدار رشته اي را از طريق اين عملگر فراهم مي سازد. مثلا مي توانيد يك متغير رشته اي با مقدار I am را با يك متغير ديگر با مقدار a developer به وسيله علامت + جمع بزنيد. در اين صورت آن عبارت به صورت I am a developer خواهد بود. اين ويژگي در برخي از كلاس هاي ديگر چارچوب دات نت نيز وجود دارد. اما متاسفانه در VB.NET برنامه نويس نمي توانست براي كلاس ها و اشيايي كه خود مي سازد،از اين قابليت استفاده كند. اين محدوديت در VB.NET 2.0 برطرف شده است. مثلا شما مي توانيد يك نوع داده جديد(Type) تعريف كنيد كه شامل يك آرايه دو بعدي باشد(مثل يك نقطه در فضاي برداري x-y) و براي اين كلاس يك عملگر + مخصوص تعريف كنيد كه وقتي دو متغير از اين نوع را با هم جمع مي زنيد،مقدارهاي بعد اول (X)با هم و مقدارهاي بعد دوم (Y) نيز به طور جداگانه با هم جمع شوند.
Reg – Free COM
قابليت بسيار مهم و جالبي كه به ويژوال بيسيك 2005 افزوده شده است،تكنيك Reg – Free COM نام دارد كه حتما بسياري از برنامه نويسان دات نت منتظر آن بودند.
اغلب برنامه نويسان ويژوال بيسيك6 به خاطر مي آوردند كه يكي از دردسرهاي مهم برنامه نويسي براي سيستم عامل ويندوز ،ساختن برنامه نصب (Installation) و ثبت كامپوننت هاي عناصر اصلي برنامه در رجيستري ويندوز بود. دو كابوس هميشگي برنامه نويسان ،نحوه نصب عناصر ActiveX وDLL هاي حاوي اشيا COM وCOM+ بود.
اين مشكل چندان اهميت داشت كه برنامه نويسان به شوخي نام DLL Hell يا جهنم DLL را بر آن نهاده بودند. خوشبختانه پلتفرم دات نت اين مشكل را به طور عمده حل كرد؛زيرا به دليل حضور چهارچوب دات نت در سيستم عاملي كه قرار است يك برنامه نوشته شده با Visual Studio.NET روي آن اجرا شود، ديگر نيازي به رجيستر كردن كامپوننت ها و اشياي برنامه نيست و عمل نصب برنامه خيلي ساده با كپي كردن فايل هاي نرم افزار داخل پوشه روي هارد ديسك انجام مي شود.
با اين حال عيب كار در اينجا بود كه برنامه نويسي كه با هزار زحمت توانسته بودند يك شي COM يا ActiveX بي درد سر و بي عيب بسازد،در صورت مهاجرت به پلتفرم دات نت مجبور بودند يا به كلي از خير اين اشيا استفاده مي كردند،همچنان ناگزير از نصب اين اشيا به روش قديمي (به رقم نصب آسان ساير قسمت هاي ساخته شده بر اساس چارچوب دات نت ) بودند.
اكنون ويژوال بيسيك 2005 با معرفي تكنيك Reg –Free COM اين معضل را به طور عمده از پيش روي برنامه نويسان برداشته است. به كمك اين تكنيك مي توانيد اغلب اشياي COM و ActiveX سابق خود را با يك اينترفيس دات نتي بپوشانيد. به طوري كه بتوان آن ها را مانندDLL هاي توليد شده بر اساس دات نت خيلي ساده داخل پوشه برنامه كپي كرد و بدون نياز به ثبت در ريجيستري ويندوز مورد استفاده قرار داد. براي استفاده از اين قابليت كافي است در قسمت Refrence هاي پروژه به DLL حاوي ActiveX يا COM ارجاعي تعريف كنيد. سپس در پنجره Properties گزينه Isolated را معادل True قرار دهيد. البته اين قابليت محدوديت هايي هم دارد:يكي اينكه به ويندوز XP يا نسخه هاي بالا تر نياز دارد. ديگر اينكه فقط براي كامپوننت هاي in-proccess قابل استفاده است . اين قابليت همچنين براي آن دسته از اشياي COM كه جزيي از سيستم عامل ها هستند كار نمي كند و نهايتا اين كه نمي توانيد از قابليت مذكور براي آن دسته از اشياي COM و ActiveX كه به حضور نرم افزارهاي بزرگي مثل Word وابسته هستنداستفاده كنيد. اين گونه ActiveX ها فقط وقتي كار مي كنند كه نرم افزار مربوطه (مثلا اكسس) قبلا روي كامپيوتر نصب و رجيستر شده باشد.
My Namespace
يكي از اقداماتي كه مايكروسافت براي آسان كردن برنامه نويسي با ويژوال بيسيك دات نت يا به قول مايكروسافت تحقق ايده RAD انجام داده، افزون يك Namespace با نام My است. به كمك اين Namespace مي توانيد به برخي از قابليت هاي پر مصرف سيستم عامل ويندوز مانند دسترسي به فايل سيستم ،پخش صوت ،امنيت و تنظيمات سيستم دسترسي سريع داشته باشيد. اين Namespace شامل اجزاي اصلي زير است:
Application : امكانات مختلفي در اختيار برنامه نويس قرار مي دهد. مثلا مي تواند داخل سيستم EventLog ويندوز بنويسد و بخواند.
Computer :دسترسي آسان و سريع به برخي قسمت هاي كامپيوتر مانند فايل سيستم،ماوس،صفحه كليد،ساعت،كليپ بورد،صوت ،رجيستري،شبكه،پورت سريال و چند بخش ديگر را فراهم مي كند.
Forms : از طريق اين كلكسيون برنامه نويسان مي توانند به instanceهاي فرم هايي كه ساخته اند دسترسي سريع داشته باشند.
Resources : اين كلكسيون يك دسترسي مستقيم به كلاس هاي زير را فراهم مي كند.
System.Globalization.CultureInfo
System.Resources.ResourceManager
Setting : اين كلكسيون دسترسي به تنظيماتي كه براي نرم افزار خود ايجاد كرده ايد را آسان مي سازد. User : اين شي درباره وضعيت امنيتي كاربر كنوني سيستم اطلاعات ميدهد. با اين كلاس مي توانيد بفهميد هم اكنون كدام كاربر با چه سطح دسترسي وارد سيستم شده است. قطعه كد 2 چند مثال از كاربرد My را نشان ميدهد. قسمت اول داخل تابع Form1Load تمام پارتيشن هاي هارد ديسك را مرور مي كند و ميزان فضاي خالي آن ها را نشان مي دهد.
قسمت دوم كنترل مي كند كه نام كاربر فعلي چيست و آيا عضو گروه Administrator هست يا نه . قسمت سوم هم يك فايل صوتي را پخش مي كند.از آنجا كه My فقط يك Namespace است ،مي توانيد با ايجاد كتابخانه هاي جديد آن را توسعه دهيد و قابليت ها،كلاس ها و كلكسيون هاي جديدي به آن اضافه كنيد. بنابراين My در واقع نوعي تفكر برنامه نويسي است. تفكري كه بر اساس آن ،كلاس ها و ديگر قابليت هاي زبان پر كاربرد ويژوال بيسيك دات نت را مي توانيد دم دست خود بگذاريد تا استفاده از آن ها در سراسر سورس كد سريع و آسان باشد.
Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)
For Each drv As IO.DriveInfo In My.Computer.FileSystem.Drives
If drv.IsReady Then
Debug.WriteLine(drv.AvailableFreeSpace)
End If
Next
MsgBox(My.User.Name & “ : ” & My.User.IsInRole(“Administrators”))
My.Computer.Audio.Play(“C:\sound.wav”)
End Sub