ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

فصل یکمقدمهای بر C# و .NET

<!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

فصل یک

C# و .NET مقدمهای بر

در این فصل یاد خواهید گرفت:

معماری و ویژگیها :NET. • مروری بر چارچوب

1: مروری بر کارهای قابل انجام توسط قسمت زمان اجرای چارچوب. CLR •

فقط در لحظه بارگذاری اسمبلیها و تایید کد لازم است). ) .JIT2 NET • کامپایلر

و تعامل بین زبانی را مدیریت میکنند. CLR قوانینی که سازگاری :CTS و 4 CLS3

اسمبلیها: نگاهی کوتاه به ساختار یک اسمبلی، فلسفهی پشت آن و تفاوت مابین اسمبلیهای خصوصی و اشتراکی.

این کتابخانه صدها کلاس پایهی گروهبندی شده در فضاهای نامی منطقی را فراهم میکند. :FCL5

بر ای نما یش ILdasm چندین ابزار با هدف توسع ه ی کد فراهم شده اس ت . این ابزار شام ل .NET • ابزار توسعه : بوسیلهی

برای مشاهده خصوصیات یک کلاس و ابزار دیگر پیکربندی چارچوب. WinCV ، کد

از خط فرمان و گزینههایی برای پیکربندی یک برنامه. #C کاربرد کامپایلر :#C • کامپایل کردن و اجرای برنامههای

استفادهی کار ای یک زبان ، یادگیری گرامر و و یژگیهای زبان را نیاز دارد . در حق یقت بخش اعظم منحن  ی ی ادگیری بر ای

کافی نیست. معمار نرم افزار و توسعه دهند ه ی #C تکنولوژی جد ید، به مح یط برنامه نویسی مرتبط اس ت . حرفهای شدن در

موفق باید کتابخانههای اصیل کلاس و ابزار تولید آنها را بشناسد.

شامل یک محیط اجرایی پیوند خورده به یک کتابخانه کلاس پایه است، که در ای ن Platform .NET از منظر برنامهنویسی

بررسی خواهد شد. Platform .NET و طرز کار با FCL ،CLR فصل

NET. 1-1 مروری بر ساختار

بصورت یک مح یط مجتمع بر ای توسعه و اجرای برنامه های اینترنتی، برنامههای کاربرد ی و یندوز(میزکار) و حتی NET. ساختار

دستگاههای موبایل طراحی شده است. اهداف اصلی آن بصورت زیر است:

فراهمساختن یک محیط شیگرایی مابین دامنهای از کاربردها.

را کم کرده و پروسه توزیع و نصب کد را ساده می کند. DLL با فراهم ساختن این محیط، تداخل نسخههای

1 Common Language RunTime

2 Just In Time

3 Common Language Specification

4 Common Type System

5 Framework Common Library

MOHSEN_MAHYAR@YAHOO.COM

14

یک مح یط قابل حمل 1 براساس استانداردها ی تا یید شده آماده می ساز د تا بتوانند توسط هر س یستم عامل ی میزبا نی

استاندارد شدهاند. ECMA بوسیلهی 3 CLI به نام 2 NET. و یک بخش اصلی از زمان اجرای #C شوند،. در حال حاضر

فراهم ساختن یک محیط مدیریت شده، که اجرای امن را به سادگی تایید می کند.

برای رس یدن به این اهداف بزرگ ر و ی یک معمار ی به توافق ر س یدند ک ه چ ا رچوب را به دو بخش NET. طراحان چارچوب

1 آن را ارائه م یکند. - شکل 1 FCL. و CLR : تجزیه می کند

NET Framework. 1 معماری - شکل 1

توسط م ا یکروسافت) اجرای کد و همه کاره ا ی تخ ص یص یافته به آ ن همچون کامپای ل، CLI پیاده سازی استاندارد )CLR

که کد مد یریت شده م ی نامند)، ) CLR مدیریت حافظه، ام ن یت، مدیریت ریسمان و ایمنی از نوع داد ه 4، کد اجرا شده تحت نظر

را اداره می کند. API و COM همچون CLR کد مدیریت نشده توسط

قطعه اصلی دیگر می باشد. یک کتابخانه کد قابل استفاده مجدد (شامل کلاس ها، ساختارها و غیره )، که برای برنامه های FCL

این کتابخانه کلاس مشترک را استفاده می کنند. پس این مفاهیم NET. در دسترس است. همه زبان های NET. اجرا شده تحت

مشترک خواهد بود. NET. در همه زبا نهای

CLI و استانداردهای NET.-1-1 -1

می پرسد: آیا این مهارت را می تواند به #C و NET. یک توسع هدهنده قبل از صرف زمان برای یادگیری

مایکروسافت فقط مختص س یستم عامل ویندوز NET. های دیگر تبد یل کند؟ آیا محصول Platform

است؟ یا آیا آن قابل حمل اجرایی است و آن برای حمل روی سیستم عامل های دیگر نیز پیاده سازی

CLI و استانداردهای C#.NET شده است؟ برای جواب دادن به این سئوال، فهمیدن رابطهی مابین

ضروری است.

را تعریف می کند. آن هیچ سیستم عامل ی را تعیی ن نم ی کند و بر ای Platform یک مح یط اجر ایی مجاز ی مستقل از CLI

CLI است که با ید توسط کامپ ا یلرهای مط ی ع CIL لینوکس همانند و یندوز راحت اس ت . بخش استاندارد مرکزی، تعریف یک 5

1 Portable

2 Common Language Infrastructure

3 European computer Manufactures Association

4 Type Safety

5 Common Intermediate Language

NET. فصل اول- مقدمهای بر چارچوب

15

را تعر یف م  ی کند . CLI تولید شود. بخش دیگر س یستم نوع 1 است که همه انواع داده ای پشت یبان شده توسط هر زبان م ط یع

این کد میانی به زبان اصلی سیستم عامل میزبان کامپایل می شود.

در بر دارد که بوسیله مایکروسافت توسعه و ارتقاء #C استانداردهایی را برای زبان CLI

(Fortran,Pascal,Pythen,Defacto). یافته اند

است. این پ یاده سازی و یژگی های ز ی ادی CLI ارائه شده در شک ل 1 1، پ یاده سازی ما یکروسافت از استاندارده ا ی NET. چاچوب

2 مقا ی سه - شکل 1 CLI مشخص م ی شوند. برای فهم بیشتر، آن را با معما ر ی استاندارد ه ا ی CLI دارد که بو س یله معم اری

کنید.

CLI 2 معماری تعریف شده بوسیله مشخصه - شکل 1

این کتاب پ یادهسازی ما یکروسافت را تش ر یح م ی کند. فرض بر آن است که م یتوانیم از کده ا ی قبل ی نوشته شده نیز استفاده

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

است.

CLR -2-1

تمام چرخ ه ی زندگ ی یک برنامه کاربر د ی را م د یریت م ی کند. آ ن کد را یافته و کامپایل م ی کند. کلاس ها ی تخص یص یافته CLR

را بارگذار ی م ی کند. اجرایش را م د یریت م ی کند و مدیریت اتومات یک حافظه را مطمئن م  ی سازد . آن ارتباط ب ین زبا نی را

را نشان CLR پشتیبانی م ی کند، تا تعامل ما بین کدها ی نوشته شده در زبا ن های مختلف را مجاز دار د . این بخش کارکرد داخ ل ی

می دهد. آن یک بحث عمقی نیست و فقط می خواهد شما را با اصطلاح آن آشنا سازد.

NET. -1-2 کامپایل کردن کد -1

خاص پ یشنهاد شده اس ت . این کد به CPU کد ی تو لید م ی کنند که کد هدف زمان اجرا بوده و برای یک CLR کامپایلرهای مطیع

بسته بندی م  ی شود . توجه ک ن ی د که EXE یا DLL یک زبان از نوع اسمب ل ی است که در یک فا یل MSIL یا IL . است CIL نام

را به ی ک کد ماش ین IL ,JIT اسمبلی ها فایل هایی با استاندارد اجرایی نیستند. لازم است یک کامپایلر زمان اجرا به نام

اس  ت، ای ن کد م ی انی یک ی از IL مسئول م د یریت ای ن CLR خاص تبد یل کند . (زمانی که برنامه واقعا اجرا م ی شود). چون

CLR ، 3 نشان م  ی دهد - از نظر سازگاری زبان اس ت . همانطور که شک ل 1 NET. کلیدهای رویارویی با اهداف اسم ی چا رچوب

1 Type System

MOHSEN_MAHYAR@YAHOO.COM

- C# برنامه نویسی

16

با هم IL مستقل از زبان می باشد. چون برنامه ها از ط ر ی ق IL نمی داند چه ز بانی این برنامه را ایجاد کرده اس ت . تعامل آن ب ا

ارتباط برقرار می کنند، پس خروجی یک کامپایلر می تواند با خروجی کامپایلر متفاوت دیگر مجتمع شود.

CLR 1 عملکرد - شکل 3

فراهم م  ی شود . بد ین JIT است ، که با مح ل ی کردن 1 ایجاد کد ما ش ین در کامپ ا یلر Platform قابل یت حمل ،NET. هدف د یگر

با JIT د یگری که چارچوب خاص خودش و یک کامپا یلر Platform م ی تواند رو ی Platform تولید شده رو ی یک IL معنی که

کد ماشین خاص خودش را دارد، اجرا شود.

با ید فراداده 2ای را نیز صادر کنند . در فر اداده ها ،IL است ، برای هر ماژول علاوه بر تولید CLR کامپایلرهایی که کد هدف آنها

مجموعه ای از جداول قرار می گیرند تا هر ماژو ل ، کد خود - توص یف 3 داشته باشد. در جداول علاوه ب ر توص یف کامل کد،

اطلاعاتی درباره اسمب ل ی ها نیز وجود دار د . این اطلاعات شامل موارد د یگر نیز هستند: چه نوع داد ه هایی در دسترس هستن د ؟

نام هر نوع داده، اعض ا ی نوع د اده، دامنه یا م یدان د ید نوع داد ه و ویژگی های هر نوع داده د یگر . ف راداده های د یگر ی ک ه

کاربردهای زیادی دارند:

است، که اطلاعات همه ی نوع داد ه های مورد نیاز بر ای کامپا ی ل کردن را JIT • مهمترین کار برد آن بو س یله کامپا یلر

مستقیماً از فراک د 4 جمع آوری م ی کند. این اطلاع ات را بر ای بررس ی کد بکار م ی برد تا مطمئن شود برنامه عم ل ی ات را

از طریق مقایسه ی پارامترهای متد، فراخوانی صحیح را مطمئن می سازد. JIT ، به درستی انجام می دهد. برای مثال

فراداده ها در پروسه جم ع آوری زباله 5 استفاده م ی شوند. جمع کننده زباله، برای شناسا یی ف یلد ها و ارجاعات آنها ا ز

فراداده استفاده می کند و می تواند تعیین کند حافظه ی چه اشیایی می توانند آزاد شوند یا نه؟

یک مجموعه از کلا س ها بر ای خواندن فرادا د ه های یک برنامه فراهم م ی کند. این توانایی به ن ا م انعکاس 6 شناخته NET. •

می شود، که یک و یژگی قدرتمند است و اجازه می دهد یک برنامه در زمان اجرا، کد را مورد جستجو قرار دهد و

براساس اطلاعات یافته شده تصمیم گیری کند. می توان صفات سفارشی را به فراداده اضافه کرد.

1 Localizing

2 Metadata

3 Self descriptive

4 Meta code

5 Garbage Collection

6 Reflection

NET. فصل اول- مقدمهای بر چارچوب

17

که ی ک NET. و فراداده بر ای فراهم ساختن ارتباط بین زبا نی بس یار مهم هستن د . اما د نیای واقع ی به همه کامپ ا یلرها ی IL

سازگار IL مجموعه ی مشترک از انواع داد ه ای و توصیف زبان را پش ت یبانی م ی کنند، منوط اس ت . بر ای مثا ل ، دو زبان د ر

نیستند، اگر یکی عدد صحیح ع لامت دار 32 بیتی را پش ت یبانی کند و دیگری آن را پشت یبانی نکند . آنها ممکن است گرامر

متفاوتی داشته باشند، اما باید روی انواع داده ای پایه که پشتیبانی می کنند، توافق داشته باشند.

است . آن شرح م ی دهد CLR تعریف م ی کند که بخش مکم ل CTS یک توص یف رسمی به نا م CLI ، همانطور که قبلاً بحث شد ه

پشتیبانی شوند. CLR که چگونه انواع داده ای تعریف می شوند و چگونه باید رفتار کنند تا بوسیله

CTS-2-2 -1

فراهم م ی کند. علاوه بر این نحوه اعلان و ایجاد انواع داد ه ای NET. یک مجموعه ی پا یه از انواع داد ه ای بر ای زبان های تحت CTS

،NET. 4 نشان م ی دهد چگون ه - سفارشی و نحوه مد یریت مدت زمان عمر نمون ه های این نوع داد ه ها را ت ع یین م ی کند. شکل 1

را سازما ندهی می کند. CTS

CTS 4- انواع داده ای پایه تعریف شده در - شکل 1

از این شکل دو چ یز به دست م ی آید. واضح ترین مورد اینکه، انواع مقدا ر ی 1 یا ارجاع ی 2 گ روه بندی م ی شوند. این طبقه بندی بر

از طریق اشاره گرها ،Heap اساس نحوه ی ذخ یره و دسترسی در حافظه اس ت . انواع ارجاع ی در یک ناح یه ی خاص حافظه به نام

برنامه قرار م ی گیرند. مورد د یگر اینکه، همه انواع داد ه ای اعم Stack دستیابی م ی شوند، در حا لیکه انواع مقدا ر ی مستق یماً در

ارث بری م ی کنند. پس مطمئناً System.Object از یک نوع داد ه ی پ یش تعر یف شده بنام NET. از سفارش ی و انواع داده ای

همه انواع داده ای، یک مجموعهی پایه از متدها و خصوصیات را ارث بری می کنند.

نوع داده" 3 "،NET. در

یک عبارت کلی است که به یک کلاس، ساختار، نوع شمارشی یا واسط یا نماینده اشاره می کند.

میزبانی شوند. این به CLR است، تضمین می کند که انواع داد های آن می توانند بوسیله ی CTS کامپایلری که مطیع مشخصه

وجود دارد که CLS تنهایی ضامن ارتباط یک زبان با زبان دیگر نیست. یک مجموعهی محدود کننده از مشخصات به نام

قوانینی را برای ارتباط بین زبانی تعریف می کنند. این مشخصات، ویژگی های حداقلی تعریف می کنند که یک کامپایلر با هدف

را نشان می دهد: CLS 1 بعضی از قوانین - باید شامل باشد. جدول 1 CLR

CLS 1 قوانین و ویژگیهای - جدول 1

1 ValueType

2 Refrence Type

3 Type

MOHSEN_MAHYAR@YAHOO.COM

- C# برنامه نویسی

18

ویژگی قانون

میدان دید 1 این قوانین فقط به آن اعضایی از یک نوع داده اعمال می شوند که از بیرون اسمبلی تعریف کننده

در دسترس است.

کاراکترها و حالت

آنها

در دو متغیر متمایز، باید اختلاف آنها بیشتر از حالت کاراکترها در آنها باشد.

هستند. CLS انواع اصلی انواع داده ای اصلی مطیع

Byte,Int16,Int32,Int64,Single,Double,Booleam,char,Decimal,Intptr,String

سازنده یک سازنده قبل از دسترسی به هر داده از کتابخانه، باید سازنده کلاس پایه را فراخوانی کند.

محدوده های آرایه همه ابعاد آرایه ها باید از اندیس صفر شروع شوند.

64 باشد. ,Int32Int 16Int, وByte نوع شمارشی نوع داده اصلی یک نوع شمارشی باید از نوع

باشند. CLS متد انواع دادهی پارامترها و مقدار بازگشتی استفاده شده در متد باید مطیع

را در نظر بگیرید تا نحو هی اعمال این قوانین را ببینیم: #C این قوانین مشخص و واضح هستند. قطعه کدی از

public Class Conversion

}

public double Metric (double inches)

{

return (2,54 * inches) ;

}

public double metric (double miles)

{

return (miles/0,62);

}

{

metric و Metric مغا یرت دارد . چون دو مت د CLS آشنا نیستید، ولی م ی توانید به راح ت ی بب ینید که با قوا نین #C اگرچه با ک د

با شکست مواجه می شود. VB.NET جواب می دهد، ولی درصورت تعامل با کدنویسی #C قانون را نقض کرده اند. اگرچه در

-3-2 اسمبلیها -1

EXE اجرا م ی شوند، باید در یک اسمبلی قرار گیرند. بطور منطقی اسمبلی یک فای ل NET. همه کدها ی مد یریت شده که تح ت

است . از نظر ف یزیکی ممکن است شام ل کلکس یونی از یک یا چند ف ا یل باشد ، که هر ف ا یل م ی تواند شامل کد یا منابع ی DLL یا

باشند. XML همچون تصاویر یا

تبد یل م ی کند، ی ک اسمب ل ی ایجاد م  ی شود . EXE یا DLL یک فا یل کد منبع را به یک NET. زمانی که یک کامپا یلر سازگار

است . ای ن موارد را بی شتر IL 5 مشاهده م ی کنید، یک اسمبل ی شامل یک اظهارنامه 2، فرا داده و - همانطور که در شک ل 1

بررسی می کنیم.

اظهار نامه

1 Visiblity(Scope)

2 manifest

NET. فصل اول- مقدمهای بر چارچوب

19

هر اسمبل ی با ید یک فا یل برای د ر برداشتن اظهارنامه داشته با شد. اظهارنامه شامل جداو لی است که در این جداو ل ، اس  امی

همه فا یل های موجود در اسمب ل ی، ارج اعات به اسمب ل ی های بیرونی و اطلاعاتی همچون نام و نسخه اسمبلی لیست م ی شو ند.

اسمبلیهای نامگ ذاری شده ، یک امضاء د یجیتالی 1 منحصر به فرد دارن د . زمانی که یک اسمبل ی بارگذار ی م ی شود، ابتد ا فایل

بارگذاری می شود تا بتواند اعضای اسمبلی را تشخیص دهد. CLR توسط manifest

فرا داده

جداول تع ر یف نوع داد ه و ارجاع را تو لید م ی کند. جداول تعر یف، یک توص یف کا مل از #C کامپایلر ،manifest علاوه بر جداول

فراهم م ی کنند. برای مثال، جداو لی بر ای تعر یف انواع داد ه ای، متدها، فلیدها و خصوصیات وجود IL انواع داده ای موجود در

بر پایهی JIT دارند. جداول ارجاع ، اطلاعات ی را در مورد ارجاعات به انواع داده ای و اسمبلی های د یگر شامل هستند. کامپایلر

را به کد ماشین موردنظر تبدیل می کند. IL ، این جداول

IL

بسته بند ی DLL یا EXE را بکار ببرد، با ید در یک اسمبل ی IL بتواند CLR در حال ح اضر بحث شده است. قبل از اینکه IL نقش

بصورت یک DLL نقطه ی ورود ی دارد که آ ن را قابل اجرا م ی سازد. یک اسمبل ی EXE شود. این دو یکسان نیستند. یک اسمبلی

کتابخانه از تعاریف انواع داده طراحی می شود.

5 اسمبلی تک فایلی - شکل 1

را بر ای توسعه ی کد، کنترل NET. اسمبلی، چیزی بالاتر از یک روش منط ق ی بر ای بسته بندی کد قابل اجرا است. آن قلب مد ل

نسخه و امنیت تشکیل می دهد.

شامل انواع داد ه ای قاب  ل DLL • تمام کد م د یریت شده ی مربوط به یک برنامه مستقل ، یک ک نترل یا یک کتابخان ه

استفاده مجدد ، در یک اسمبل ی بسته بندی م ی شوند. آن تجر یه ناپذیرترین واحد است که م ی تواند رو ی یک س یستم

بکار گرفته شو د . زمانی که یک برنامه آغاز م ی شود، باید فقط اسمبل ی هایی که بر ای مقدارده ی او لیه لازم هستن د ، در

حافظه باشند . اسمبلی های د یگر براساس نیاز بارگذ اری م ی شوند. یک توسع ه دهنده این مز یت را بر ای تق س یم ی ک

برنامه به چندین اسمبلی براساس فرکانس استفاده آنها بکار می برد.

اسمبلی یک محدوده ی نسخه تش ک یل م ی دهد. فیلد نسخه در اظهارنامه روی تمام انواع داده و منابع ،NET. • در

اسمبلی اعمال م ی گردد. همه فا یل های تشک یل ده نده اسمبل ی بصورت یک واحد منفرد با نسخ ه ی یکسان در نظر

می تواند ی ک صفت منطق ی را ما بین چند ین فای ل NET. ، گرفته م ی شوند. با جدا کردن بسته ف یزیکی از منطقی

سن ت ی متم ا یز DLL فیزیکی به اشتراک گذارد . این یک و یژگی پا یه است که یک اسمبل ی را از س یستم مبتن  ی ب ر

می کند.

1 Digital signature

اسلام احمد زاده - 09177112161 - C# برنامه نویسی

20

معرفهای دسترس ی را بر ای کنترل نحوه #C . • اسمبلی یک محدوده ام ن یت رو ی جواز های دسترس ی تشک یل م ی دهد

دسترسی انواع داده و اعضای انواع داده در یک اسمبل ی بکار م ی برد. دو مورد از کاربرد اسمبل ی به عنوان محدوده

بصورت زیر است:

دسترسی نامحدود به هر اسمبلی را مجاز می شمارد. : public

دسترسی را به انواع داده و اعضای داخل آن اسمبلی محدود می کند. :internal

همانطور که شرح داده ش د ، ممکن است یک اسمبل ی چند ین فا یل را شامل شود که این فا یل ها محدود به ماژو ل ه ای کد

نیستند. ممکن است ف ا یل های منبع همچون تصا و یر گراف یکی و فایل های متن ی باشن د. یک کاربرد عمو م ی این فا یل ها، مجاز

داشتن منابع ی است ک ه یک واسط بر ای کشور یا زبان یک کاربر فراهم م ی کند . ه یچ محدود یتی روی تعداد ف ای ل ها در

6 طرح یک اسمبل ی چند ف ا یلی را در د یاگرام اسمبل ی چند ف ا یلی نشان م ی دهد. توجه د اشته باش ید - اسمبلی نیست. شکل 1

که اظهارنامهی اسمبلی شامل اطلاعاتی است که همه فایل های اسمبلی را تعیین می کند.

6-اسمبلی چند فایلی - شکل 1

اگرچه بیشتر اسمبلی ها، یک فایل منفرد را شامل هستند، ولی در چندین حالت، اسمبلی های چند فایلی مزایایی دارند.

و VB.NET • آنها ترکیب ماژ ول های تو لید شده در زبا ن های برنامه سازی مختلف را مجاز م  ی دارند . اگر کده ا یی در

باهم تعامل داشته باشند. NET. نوشته شده باشند، این دو کد می توانند در یک فایل اسمبلی #C کدهایی در

ماژول های کد م ی توانند تقس یم بندی شوند . بایستی کد پر استفاده و ،،CLR • برای بهینه کردن نحو ه ی بارگذاری ب ه

ماژول ها را در صورت نیاز بار گذاری م ی کند. هنگام ایجاد یک کتابخان ه ی CLR . مرتبط بهم در یک ماژول قرار گ یرند

کلاس، لازم است قطعا ت کد براساس چرخه زند گ ی و نسخه و امنیت مشترک در اسمب ل ی های مجز ایی گرو ه بند ی

شوند.

قرار بگیرند، تا چند ین برنامه منابع مشترک خو د را IL • فایل های م نبع م ی توانند در ماژو ل های مجز ایی از ماژول های

به راحتی به اشتراک گذارند.

(AL.exe (Assembly Linker از خط فرمان ی ا برنامه سودمن د #C اسمبلی های چند فایلی می توانند با اجرای کامپایلر

2005VS.NET از خط فرمان در بخ شهای بعدی آمده است. توجه داشته باش ید که #C ایجاد شوند. یک مثال کاربرد کامپایلر

ایجاد اسمبلی های چند فایلی را پشیتیبانی نمی کند.

-4-2-1 اسمبلی های خصوصی 1 و اشتراکی 2

1 Private

2 Shared

NET. فصل اول- مقدمهای بر چارچوب

21

اسمبلی ها به دو روش ممکن (خصوصی یا سراسر ی) ایجاد می شوند. اسمبلی هایی که در فهرست اصلی برنامه ی ا در ی ک

زیرفهرست آن قرار م ی گیرند، اس مبلی های خصوص ی خوانده م ی شوند. نصب و بهنگام ساز ی یک اسمبل ی ساده اس ت . فقط

در آن برنامه کپی شود. هیچ تنظیم رجیستری لازم نیست. علاوه بر ای ن AppBase لازم است اسمب ل ی به یک فهرست به نام

کردن ت نظیمات پیکربندی برنام ه می توان یک اظهارنامه به برنامه کار بردی اضافه کرد و اجازه داد ی ک فا ی ل override برای

منتقل شود. AppBase اسمبلی به فهرست

نامیده م ی شود و بوسیله چند ین برنامه قابل دس ت یابی GAC یک اسمبل ی اشتراک ی در یک موقع یت سراسر ی نصب م ی شود، که 1

برای پش ت یبانی از NET. . مجاز داشتن اجرای چند ین نسخه ا ز اسمبلی در کنار هم د یگر م ی باشند GAC است. مهمترین و یژگی

این امر، مشکل تداخل اس م ی را با استفاده از چهار صفت جهت شناختن یک اسمبل ی رفع می کند. نام فایل، مشخصه فرهنگ

، شماره نسخه، نشانه کلید عمومی.

قرار می گیرند. همانطور که در شکل (winnt) از فهرست س یستم عامل Assembly معمولاً اسمبلی های عموم ی در زیرفهرست

7-1 نشان داده شده است ، اسمبلی ها در یک قالب خاص لیست م ی شوند که چه ا ر صفت آ ن نشان داده م ی شود. چار چو ب

را نمایش دهد. GAC را قادر می سازد محتوای Windows Explorer دارد که DLL یک فایل NET.

نگاهی سریع به این چهار خصوصیت داریم:

نام اسمبلی: این همان نام فایل اسمبلی بدون پسوند آن است.

نسخه : هر اسمبل ی یک شماره نسخه دارد که به همه ف ا یل های اسمبل ی اعمال م ی گردد. آن شامل چهار عدد به قالب

زیر است :

<major number>.<minor number>.<build>.<revision>

معمولا شماره ها ی اصل ی و فرعی نسخه بر ای تغ ییرات بروز م ی شوند، چون سازگار ی را تحت تا ث یر قرار م  ی دهند .

در کد منبع اسمبلی به آن تخصیص داده می شود. AssemblyVersion شماره نسخه بوسیله یک صفت به نام

تنظیم فرهنگ : ممکن است محتوای یک اسمبل ی به یک زبان و فرهنگ خا ص ی تخص یص داده شو د ، که با صفت

در کد منبع اسمبلی مشخص می گردد. AssemblyCulture

[ ("assembly: AssmblyCulture ("fr-CA]

باید NET. • نشانه کلید عمومی: برای اطمینان از اینکه یک اسمبلی اشتراکی، منحصر بفرد و تصدیق شده است، در

ایجاد کننده اسمبلی آن را با یک نام قوی نشانه گذاری کند. این پروسه را امضاء کردن 2 گویند که جفت کلید

عمومی/خصوصی را نیاز دارد. در زمان کامپایل اسمبلی، کلید خصوصی برای تولید یک نام قوی بکار می رود، کلید

عمومی برای نشانه بزرگ است، پس با عمل درهم سازی کلیدعمومی، 8 بایت آخر آن را انتخاب می کنند. این نشانه

در اظهارنامه ی هر اسمبلی سرویس گیرنده که به یک اسمبلی اشتراکی ارجاع دارد جای می گیرد و برای تشخیص

اسمبلی در حین اجرا بکار م یرود.

1 Global Assembly Cache

2 Signing

MOHSEN_MAHYAR@YAHOO.COM

- C# برنامه نویسی

22

7- بخشی از فهرست اسمبلی سراسری - شکل 1

-4-2-1 از پیش کامپایل کردن یک اسمبلی

آن به کد ما ش ین جاری کامپا یل شود. اگر ش ما با ف ا یل های قابل اجرا در فرمت ک د IL بعد از بارگذا ر ی یک اسمبل ی، با یستی

امکان پذیر است، پ یش .NET ماشین کار م ی کنید، سئوالات ی در مورد بهر ه وری و اینکه آ یا ایجاد فا یل های قابل اجر ای معادل در

یک روش برای از پیش کامپایل کردن یک اسمبلی فراهم می کند. .NET . می آید. جواب سئوال قسمت دوم بله است

دارد، که برای کامپایل ی ک اسمبل ی به ی ک "تصو یر (Native Image Generator (Ngen ابزاری به نام . NET چار چوب

ی ک CLR ذخ یره م ی شود. هر زما نی ک ه ( GAC محلی 1" بکار گرفته م ی شود، که در کش تص و یر محل ی( یک فضای رزرو شده از

اسمبلی را با ر گذاری م ی کند، کش را بر ای وجود یک تصو یر محل ی از آ ن اسمبلی بررس ی م ی کند، اگر ب ا شد آن کد از پی ش

کامپایل شده را بارگذاری می کند. ظاهراَ، این یک ایده ی خوب برای بهبود کارایی به نظر می رسد. اما چندین ایراد دارد.

،X یک تصو یر بر ای معمار ی ماش ین فرضی اجرا کننده ایجاد م ی کند. برای مثال ر و ی هر ما ش ین سازگار با پردازند ه . 86 Ngen

اجرا می گردد، آن از نوع م ا شین آگاه بوده و می تواند نکات بهر ه وری را در نظر ب گ یرد. نتیجه اینکه اغل ب NET در JIT زمانی که

اوقات خروج ی آن خارج از عملکرد اسمب ل ی از پ یش کامپایل شده است. ایراد دیگر کاربرد یک تصویر محل ی ای ن است که

تغییرات پیکربندی سخت افزار یا سیستم عامل یک سیستم، اغلب اوقات اسمبلی از پیش تعریف شده را نامعتبر می کند.

تایید کد 2

و ارزیابی فراداده . هدف آن اطمینان از IL دو نوع ت ا یید انجام م ی دهد. تایید CLR ،JIT به عنوان بخش ی از پروس ه ی کامپا یل

قابل قبول بودن کد نوع امن است. در عمل ، بد ین معن ی است که پارامتره ا ی موجود در یک فراخوا نی و متد فراخوا نی شد ه ،

و فراداده ، IL از طری ق CLR همنوع هستند یا نوع مقدار بازگش ت ی یک متد همان نوع برگش ت ی در اعلان است . خلاصه اینکه

سازگاری نوع داده ها را مطمئن می سازد. اگر به غیر از این باشد، یک خطا رخ می دهد.

یقین دارد ، کد از ط ر یق دسترس ی به حافظه ی خارج از محدود ه ی مجاز خود نم ی تواند CLR مزیت کد ت ا یید شده این است ک ه

بر ای اجر ای امن چن د ین برنامه در ی ک پروسه ی ا فض ا ی آدرس CLR برنامه های د یگر را تحت تا ث یر قرار ده د . بدین ترت یب

واحدی است و کارایی و کاهش استفاده از منابع سیستم عامل را بهبود می بخشد.

FCL -3-1

کلکسیونی از کلا س ها و انواع داده ی دیگر (نوع شمارشی، ساختارها، واسط ها) است که بر ای تمام کده ا ی م د یریت FCL

در دسترس هستن د. این بس یار مهم اس ت ، بد ین معن ی که ای ن کتابخان ه ها CLR شدهی نوشته شده در هر زبانی با کد هد ف

مختص کامپا یلرهای خاص ی نیستند. به عنو ان یک توسعه دهنده، شما م ی توانید با انواع داده موجود درکتابخان ه ها آشنا شوید،

برای شما قابل استفاده است. .NET که این دانش در هر زبان

1 Native Image

2 Code verification

NET. فصل اول- مقدمهای بر چارچوب

23

از طریق گروه بندی های منطقی به نام فضای نامی سازمان دهی می شوند. این گروه بندی ها براساس محدوده FCL منابع بوسیله

و System.Drawing عملکرد م ی باشند. برای مثال ، انواع داد ه ای مورد استفاده بر ای عمل ی ات گراف یک ی در فضاه ا ی نامی

گروه بندی م ی شوند. انواع داد ه ای مورد نیاز بر ای ورود و خروج فا یل ها، اعضا یی از فضای نامی D2System.Drawing.Drawing

هستند. فضاهای نامی، یک مفهوم منطقی نه فیزیکی هستند. System.IO

را در برمی گیرد. هر اسمبلی ممکن است چند فضای نامی را شامل شود. به علاوه، ممکن است ی ک DLL صدها اسمبل ی FCL

نگاه کنید. FCL فضای نامی چندین اسمبلی را بهم ببافد 1. برای ارائه این مطلب به داخل یک اسمبلی

را نم ا یش م ی دهد . mscorlib جهت کنترل محتو ای اسمبل ی ILdasm.exe 8 بخش ی از خرو ج ی تو لید شده با برنام ه - شکل 1

را شامل است و انواع داد ه ای پای ه ی System فضا ی نامی mscorlib اگرچه یک لیست ناقص اس ت ، شما م ی توانید بب ینید که

را نیز در بر می گیرد که کلاس ها و واسط های مورد استفاده بر ای System.Collections در آن قرار دا ر ند و فض ا ی نامی .NET

دستکاری کلکسیون های داده را شامل می شود.

را لیست می کند. .NET 2 بعضی از مهمترین فضاهای نامی - جدول 1

2 تعدادی از فضاهای نامی متداول - جدول 1

فضای اسمی کاربرد

شامل انواع دادهی پایه است که بوسیله همه برنامهها استفاده میشود. System

آن کلاسهای استثناء، خصوصیاتی از پیش تعریف شده، کتابخانهی

و کلاسهای مدیریت محیط برنامه را نیز شامل است. Math

System.Collections

System.Collections.Specialized

System.Collections.Generic

واسطها و کلاسهای استفاده شده جهت مدیریت کلکسیونهایی از

و ... Stack,HashTable , ArrayList اشیا. این کلکسیونها شامل

هستند.

1 Span

MOHSEN_MAHYAR@YAHOO.COM

- C# برنامه نویسی

24

System.Data

System.Data.OracleClient

System.Data.OleDB

System.Data.Odbc

فضاهای .(ADO.NET) کلاسهای مورد استفاده برای عملیات پایگاه داده

را پشتیبانی میکنند و SQLServer و Oracle نامی سرویس گیرندهی

اتصال داده مورد استفاده را تعریف میکنند. Oledb,Odbc

کلاسهایی را شامل است که میتوانند اجرای برنامه، اشکالیابی، کار با System.Diagnostics

های سیستم و شمارندههای بهرهوری را پیگیری کنند. log

System.Drawing

System.Drawing.Drawing2D

System.Drawing.Printing

System.Drawing.Text

فراهم میکند. این فضاهای نامی یک +GDI عملکردهای گرافیکی را برای

fonts,pens,geometric shapes, brushes کلاس ترسیم به خوبی

را در بر دارند.

کلاسهایی در ارتباط با اطلاعات مرتبط با فرهنگ دارد که روش System.Globalization

مقداردهی تاریخها، واحد پول و سمبلهای نمایشی را تحت تاثیر قرار

می دهد.

عملیات ورود و خروج فایل و جریان داده را فراهم میکند. این کلاسها System.IO

یک روش برای دسترسی به سیستمهای فایل سیستم عامل میزبان

فراهم میکنند.

کلاسهایی که عملیات و پروتکلهای شبکه را پشتیبانی می کنند. برای System.Net

که یک صفحه وب را درخواست و WebResponse و WebRequest مثال

واکشی می کنند.

System.Reflection

System.Reflection.Emit

انواع داده ای که تغییر فراداده را در زمان اجرا مجاز می دارند، شامل

و فراداده IL به یک کامپایلر یا ابزار، تولید پویای Emit است. فضای نامی

را اجازه می دهد.

یا DLL ارتباط داخلی مابین کد مدیریت شده وکد مدیریت نشده همچون System.Runtime.InterOpServices

را فراهم می سازد . COM

System.Security

System.Securing.Permission

System.Securing.CryptoGraphy

کلاس هایی تعریف ..NET کلاس های استفاده شده برای مدیریت امنیت

میکنند که دسترسی به عملیات و منابع را کنترل میکنند.

NET کلاس هایی که موتور عبارت منظم System.Text.ReqularExperssions . را پشتیبانی میکنند.

System.Threading

System.Threading.Thread

فعالیتهای برنامهنویسی ریسمان یعنی ایجاد ریسمان، همگامسازی و

دسترسی به استخر ریسمان را مدیریت میکنند.

System.Web

System.Web.Services

معروف هستند. آنها .ASP.NET کلاس های مرتبط با اینترنت که به

نیازهای ارتباط با سرور، دستکاری کوکیها را مدیریت می کنند.

System.Web.UI

System.Web.UI.WebControls

System.WebSecurity

دارای کلاسها و واسطهایی است که برای ایجاد کنترلها و Web.UI

صفحات مرتبط با فرمهای وب استفاده می شوند.

NET. فصل اول- مقدمهای بر چارچوب

25

میزکار ویندوز استفاده GUI کلاسهایی که برای ایجاد برنامه های System.Windows.Forms

می شوند. این کنترل ها عبارت هستند از

ListBox,TextBox,DataGrid,Buttons:

یک مجموعه از انواع داد های برای پردازش System.XML XML

هستند. FCL فضاهای اسمی یک نقشه برای هدایت کردن

SDK و .NET 4-1  کار با چارچوب

SDK1 ابزارها، کامپایلرها و مستندسازی ر ا شامل می شود که جهت ایجاد نر م افزار رو ی هر ماشینی که ،.NET مربوط به چارچو ب

بصورت ر ایگان از س ا یت ما یکروسافت رو ی و یندوز MB به اندازه 100 SDK . روی آ ن نصب شده اس ت ، لازم هستن د .NET چارچوب

را ر و ی س یستم خود نصب کرده VS.NET و 2000،2003 سرور و دنباله ای از س یستم عامل های و یندوز قابل نصب می باشد. اگر XP

خود را متناسب با نر مافزارهای توسعه یافته بروز کنید. .NET باشید، نیازی به این کار نخواهد بود. لازم است نسخه چارچوب

.NET -1 بروز آوری چارچوب -4 -1

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

یافته را در یک فهرست جدید با نام نسخه قرار می دهد. مهمتر اینکه هیچ وابستگی فایلی مابین نسخه های جدید و قدیمی

وجود ندارد. پس همه نسخه ها روی سیستم، عملیاتی هستند. اگرچه درسیستم عامل های مختلف متفاوت است، ولی معمولاً

در مسیرهایی شبیه زیر قرار می گیرند:

\wint\Microsoft.NET\Framwork\V1,0,3705

\wint\Microsoft.NET\Framwork\V1,1,4322

\wint\Microsoft.NET\Fromwork\V2,0,40607

در نصب نسخه های جد ید یک نرم افزار، سئوا لی در مور د سازگار ی با برنام ه های توسعه یافته توسط نسخه ق د یمی پیش می آید.

اجرای برنامه های موجود را ساده تر می کند. نکته کلیدی این کار به فایل پیکربندی برنامه مربوط می شود. .NET

.NET -2 ابزار چارچوب -4 -1

تا حد امکان ب س یاری از عم ل یات را اتوماتیک م ی کند و جزئیات را از د ید توسعه دهنده پنهان م ی سازد. با ای ن .NET چارچوب

وجود، بعض ی اوقات دخالت دست ی مورد نیاز است . احتمال دارد به فهم بهتر جز ئیات یک اسمبلی و آماده ساز ی ی ک برنامه

برای توسعه نیاز داشته باشیم. چندین نمونه از این کارها را در اینجا عنوان می کنیم:

اضافه کردن یک فایل به یک اسمبلی

مشاهده محتویات یک اسمبلی

مشاهده جزئیات یک کلاس خاص

تولید زوج کلید عمومی/ خصوصی برای ایجاد یک نام اسمبلی قوی

1 Software development Kit

MOHSEN_MAHYAR@YAHOO.COM

 - C# برنامه نویسی

26

ویرایش فایل های پیکربندی

بیشتر این موارد در فصل های بعدی بهتر بررسی خواهند شد، ولی آگاهی از وجود این ابزار مفید است.

3 بعض ی از ابزاره ا ی موجود بر ای توسعه و توزیع برنامه های شما را لیست م ی کند. سه مورد از آنها را در این قسمت - جدول 1

بررسی خواهیم کرد.

NET. 3- ابزار انتخابی از چارچوب - جدول 1

ابزار توصیف

AL.exe

AssemblyLinker

میتواند برای ایجاد یک اسمبلی مرکب از ماژولهای تولید شده توسط

کامپایلرهای مختلف استفاده شود. همچنین برای ایجاد اسمبلیهایی

(satellite). استفاده م یشود که فقط شامل منبع هستند

Fuslogrw.exe

Assembly Binding log

Viewer

برای اشکالیابی پروسه بارگذاری اسمبلی استفاده می شود. آن مراحل

تلاش برای بارگذاری یک اسمبلی را پیگیری می کند.

Gacutil.exe

Global Assembly Cache

Tool

استفاده می شود و همچنین برای GAC برای نصب یا حذف یک اسمبلی از

نیز استفاده می شود. GAC لیست کردن محتویات

Ildasm.exe

MSSL disassembler

آن و فرادادهی آن استفاده می شود. IL ، برای کاوش یک اسمبلی

Mscorcfg.msc

NET.Framwork

Configuration Tool

که برای پیکربندی یک اسمبلی استفاده می شود. در حالیکه از MMC یک

تغییرات دستی مستقیم به یک فایل پیکربندی برنامه را در نظر نمی گیرد.

مختص مدیران سیستم طراحی شده است. برای تک تک برنامه نویسان در

دسترس است.

Ngan.exe

Native Image

Generator

یک اسمبلی را به کد ماشین محلی کامپایل می کند. این تصویر در کش IL

تصویر محلی قرار می گیرد.

Sn.exe

Strong name tool

کلیدهایی تولید می کند که برای ایجاد یک نام قوی استفاده می شود.

Wincv.exe

Windows Forms class

Viewer

یک واسط مجازی برای نمایش اطلاعات قابل جستجو درباره یک کلاس

است.

اطلاعات توصیفی درباره یک سرویس وب تولید می کند که بوسیله یک Wsdl.exe

سرویس گیرنده جهت دسترسی به سرویس استفاده می شود.

قرارگرفته اند: SDK بیشتر این ابزار در زیرفهرست

C:\progerm files\Microsoft.NET\SDK\ V2,0\Bin

اضافه ک ن ی د. مراحل کار path برای اینکه از هر مسیری بتوان اجرا کرد، ض روری است که این مس یر را به مت غ یر س یستمی

بصورت زیر است:

را انتخاب کنید. Properties کلیک راست کرده و My Computer 1. روی

NET. فصل اول- مقدمهای بر چارچوب

27

را انتخاب کنید. Enviroment Variables گزینه Advanced 2. از برگه

را به آن اضافه کنید. SDK را برگزیده و زیرفهرست Path 3. متغیر

اس ت . آن بطور اتوماتی ک VS را نصب کرد ه اید، یک روش ساده استفاده از خط فرمان از پ  یش پ یکربند ی شد ه ی VS اگر

اطلاعات مسیر را مقداردهی اولیه کرده و دسترسی به ابزار خط فرمان را قادر می سازد.

ILdasm.exe

قرار گرفته SDK فراهم شده و در مسیر نصب NET. چارچوب SDK توسط Intermediate Language Disassembler ابزار

با ید NET. گرانبهاست و یکی از اولین ابزار ی است که جهت کار با کد و اسمبلی های NET. است. آن بر ای بررس ی مح یط اسمبل ی

با آن آشنا شوید.

ساده ترین راه استفاده از آن ابزار در خط فرمان بصورت زیر است:

C:\ILdasm /adv

File را احضار می کند تا ی ک منوی GUI گزینه های پ یشرفته را نیز نشان می دهد. این دستور محیط adv/ سوئیچ اخت یاری

را باز نمی کند. GAC برای انتخاب اسمبلی مورد نظرش فراهم کند. توجه کنید که آن ابزار فایل های

9 یک مثال از خرو ج ی این ابزار را نشان م ی دهد. محتوای خروجی در فرمت سلسله مراتب ی قابل خواندن نم ا یش داده - شکل 1

می شود، که نام اسمبلی و همه اعضای آن را در بردارد.

ILDasm.exe 1 مشاهده محتویات اسمبلی بوسیله - شکل 9

Conversion مربوط به یک عضو خاص باز شو د . به عنوان مثا ل ، کلاس IL این سلسله مراتب م ی تواند تا ر س یدن به دستورا ت

دارد. کد منبع اصلی، ای ن را تص دیق Metric,conversion, metric را درنظر بگیرید. شکل نشان می دهد که آن سه متد

می کند.

public class Conversion

{

public double Metric(double inches)

{

return(2,5*inches);

}

[CLSCompliantAttribute(false)]

public double metric(double miles)

{

return (miles/0,62);

}

public double Conversion(double pounds)

{

MOHSEN_MAHYAR@YAHOO.COM

- C# برنامه نویسی

28

return (pounds*454);

}

}

به عنوان ILdasm مربوط به مت د را نشان م ی دهد. می توان از IL صفحه ای باز ش د ه و metric با دابل ک ل یک کردن ر و ی متد

و اسمبلی ها استفاده کر د . همچنین چندین کاربرد عم ل ی دارد . فرض ک ن ید ی ک قطع ه ی ثالث IL یک ابزار یادگیری مفاه یم

یک نقطه ی شروع م ف یدی بر ای ک شف جز ئیات واسط اسمب ل ی فراهم ILdasm . دارید که ه یچ مستندات ی در مور د آن ندا ر ید

وجود دارد که می توانیم مستندات برنامه را در یک فایل متنی ذخیره کنیم. File-Dump یک منوی ILdasm می کند. در

و ابهام 1 ILdasm

با وجود چ ن ین برنامه ای، سئوال اینجاست که چگونه م ی توانیم کد خود را د ر برابر چن ین برنامه هایی محافظت کن  یم. ی ک راه

حل، کاربرد ابهام است. یک تکنیک برای تغییر نام و دستکاری کد، بطوریکه محتوای یک اسمبلی توسط انسان خوانا نباشد.

بتواند آ ن را پ ردازش کند . عمل ابهام، JIT ابهام همان رمزنگا ر ی نیست. رمزگذاری یک مرحله رمزگش ا یی نیاز دارد تا کامپ ا یلر

10 مراحل کار را نشان - را به یک شکل ی تبد یل م ی کند که می تواند توسط ابزار م ح یط توسعه شما کامپ ا یل شود . شکل 1 IL کد

می دهد.

10- شکل 1

کد یکسانی را تو لید م ی کند. آن چگونه ای ن کار را CLR اسمبل ی است و در زمان اجرا توس ط IL کد ابهام عم لا معادل با ک د

انجام م ی دهد ؟ تغییر نام انواع داده ای بامعنی و اعضای آنها به اسا م ی بی معنا معمول ترین حیله است. اگر به کد ابهام نظ ر ی

خواهید د ید. البته الگور یتم ابهام ب ا ید به انداز ه ی کاف ی هوشمند باش د ، "a","b" بیاندازید، مقدار ز یادی انواع داده به نا م های

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

جایگزین کند. if,goto را با ترکیبی از دستورات while کد بدون تغییر منطق آن می باشد. برای مثال یک دستور

ی ک نسخه ی محدود از ی ک محصول Dotfuscater Community Edition . ابهام کننده ای وجود ندارد NET SDK. در

همراه است. VS.NET تجاری با

Wincv.exe

program است. آن در فهرست Visual Studio Object Viewer یک ناظر کلاس ، مشابه Wincv

قرار گرفته اس ت و از خط فرمان قابل اجراست . زمانی که پنجره ظاهر م  ی گرد د، نام .X\Bin1files\Microsoft.NET\V

11 را ببینید - کلاس مورد جستجو را وارد کنید. شکل 1

1 obfuscation

NET. فصل اول- مقدمهای بر چارچوب

29

11- شکل 1

اطلاعات ز یادی درباره هر نوع داده از کتابخانه های کلاس پ ا یه ر ا فراهم م ی کند. چهار ناح یه مشخص شد ه در شکل Wincv

قبلی یک نمونه از اطلاعات موجود را فراهم می کند:

کاوش می شود. System.Array 1. کلاس

را در بر دارد. NET. قراردارد. این اسمبلی انواع داده ای مدیریت شده mscorlib.dll 2. این کلاس در اسمبلی

از آنها ارث می برد. Array 3. این لیست شامل کلاس، شی و واسطهایی است که کلاس

4. تعریف متد های کلاس را شامل اس ت . دسترس پذیری، نوع داده ها و پارمترهای متد در این تعری ف قر ار دارند ، که

امضاء متد نامیده می شود.

-3 ابزار پیکربندی چارچوب -4 -1

این ابزار جهت دستیابی کد یک روش آسان بر ای مد یریت و پیکربندی اسمبل ی ها فراهم م ی کنند. ای ن ابزار بصورت ی ک

را Adminisrrarive Tools گزینه Control Panel بسته بندی می شو ند. بر ای دسترس ی به آن در MMC در Sanp-in

را اجرا کنید. این ابزار برای مدیرانی که کارهای زی ر Microsoft.NET Framwork Configuration انتخاب کرده و سپس

را نیاز دارند طراحی شده است.

اضافه یا از آن حذف شوند. GAC • مدیریت اسمبلی ها: اسمبلی ها می توانند به

پیکربندی: زمانی که یک اسمبل ی بروز م ی شود، ناشر اسمبل ی مسئول برو ز آوری س یاست مق ید کردن 1 اسمبل ی است .

م ی گوید، در هنگام بارگذا ر ی یک اسمبل ی، کدام نسخه ا ز آن را بارگذا ر ی کند . برای مثال ، اگر CLR این س یاست به

یک اسمبلی با نسخهی 1,1 اسمبلی نسخهی 1,0 را جا یگزین کند . این س یاست، بارگذاری نسخه 1,0 را به 1,1 هد ایت

می کند. این اطلاعات راهنما در یک فایل پیکربندی قرار می گیرند.

به یک اسمبل ی جوازها و حقوق مع  ین NET. و تغییر امنیت یک اسمبل ی : در امنیت NET. • مشاهده امن یت چارچوب

انتساب داده م ی شود. به علاوه ، یک اسمبل ی در مورد اسمب ل ی های د یگری که به آن دستر س ی د ارند، می تواند تعیین

کند که جوازهای معینی را نیاز داشته باشد.

1 Binding

MOHSEN_MAHYAR@YAHOO.COM

- C# برنامه نویسی

30

مدیریت نحوه ی تعامل ت ک تک برنامه ها با یک اسمبل ی یا مجموع ه ای ازاسمب ل ی ها : شما م  ی توانی د لی ستی از

اسمبلی های مورد استفاده یک برنامه را دیده و نسخه آن اسمبلی ها را تنظیم کنید.

برای ار ائه یک کاربر د عمل ی از ابزار پ یکربندی، توجه کن ید که آ ن چگونه یکی از عمو م ی ترین مسا یل آزار دهنده پروسه توسعه

نرم افزار را اداره م ی کند. (زمانی که برنامه جا ر ی با شکست مواجه م ی شود نیاز است به نسخه قبل  ی برگرد د .) زما نی که

یک راه حل جالب بر ای این مسئله NET. . ها یا اسمبل ی ها درگ یر م ی شود، م ی تواند یک کار مشک ل ی شود DLL سرویس دهنده با

پیشنهاد م ی کند: هر زما نی که یک برنامه اجرا م ی شود، مجموعه اسمبل ی های مورد استفاده ی برنامه ثبت م ی شوند، اگر آنها

از آنها صرفنظر م ی کند، در غ یر این صورت یک کپ ی از مجموعه ی جد ید اسمب ل ی ها CLR ، نسبت به قبل ت غ ییر نکرده باشن د

ذخیره می شود.

زمانی که یک برنامه ب ا شکست مواجه م ی شود، برگشت به نسخه قبلی یک انتخاب بر ای برنامه نویس است . ابزار پ یکربند ی

برای هد ایت برنامه به نسخه ا خ یر م ی تواند استفاده ش و ند. با این وجود ، احتمال درگیری با چند ین اسمب ل ی وجود دار د .

اینجاست که ابزار پ یکربندی به کار م ی آیند. به ش ما اجازه م ی دهد پ یکربندهای اسمبل ی ق بلی را د یده و اسمبلی هایی که با ی د

استفاده شوند را انتخاب کنید.

را اجرا کنید. شکل Fix an Application گزینه Configuration برای مشاهده و انتخاب پیکربندی های قبلی از منوی

12-1 دو کا در باز شده ی متوا لی را تر ک یب م ی کند. برنامه هایی که اجرا و ثبت شده اند ر ا در پنجره اصل ی لیست م ی کند. هنگام

کلیک بر روی یک برنام ه ، پنجره ی کوچکتر ی باز م ی شود. این پنجره ا خ یرترین پ یکربندی های تخص یص یافته به برنامه را

لیست می کند. حال می توانید پیکربندی های اسمبلی مورد دلخواه خود را انتخاب کنید.

12 کاربرد ابزار پیکربندی برای انتخاب نسخهی اسمبلی - شکل 1

Fix an . این ابزار پیکربندی مخصوص مدیران هستند. توسعه دهندگان باید به سه ویزارد 1 از این ابزار استناد کنند

در Framework wizards این ویزاردها را از طریق .Application, Trust An Assembly,Adjust .NET Security

دستیابی کنید. Adminisrative Tools

1 wizard

NET. فصل اول- مقدمهای بر چارچوب

31

C# -5-1 فهم کامپایلر

د یگر جهت وارد کردن کد منبع ، پیوند IDE یا هر VS بزرگ خود را ب ا استفاده از NET. اغلب توسعه دهندگان، برنامه های

اسمبلی های خارج ی، اشکال یابی، ایجاد خروج ی کامپا یل شده نه ا یی م ی نویسند. اگر در این شاخه کار م ی کنید، فهم یدن نحوه

را افزایش داده و به شما NET. ضروری نیست. با این وجود، این عمل فهم شما از پروسه کامپایل #C و کامپایلر NET SDK. کار با

درخط فرما ن آشنا م ی سازد. بیشتر SDK یک احساس بهتر بر ای کار با اسمب ل ی ها م ی دهد. این بخش شما را ب ا برنامه های فرع ی

مف ی د خواه ی د IDE برنامه های ارائه شده د ر بخش قبل ی از خط فرمان در دسترس هستن د . شما کار با آنها را نسبت به م ح یط

یافت.

13 مراحل اص ل ی تبد یل کد منبع به کد کامپ ا یل شده نه ا یی را نشان م ی دهد. هدف این بخش نشان دادن نحوه ایج اد - شکل 1

پنهان IDE م ی باشد. در ادامه ، بعضی از سو ئیچ های کامپا یلر که از د ی د #C یک برنامه بو س یله یک و یرایشگر متن ی و کامپایلر

هستند را خواهیم دید.

13 - پروسه کامپایل - شکل 1

-1 محل کامپایلر -5 -1

نصب می شود، قرار می گیرد. NET. در مسیری که چارچوب (C# (CSC.exe کامپایلر

C:\winnt\Microsoft.NET\Framework\V2,0,40607

اگر ) #C البته این مس یر در س یستم عامل های مختلف و نسخه های مختلف چارچوب متفاوت اس ت . برای تا یید وجود کامپ ا یلر

قرار داده باشید)، دستور زیر را در خط فرمان اجرا کنید. Path مسیر آن را در متغیر سیستمی

C:\>CSC /help

-2 کامپایل کردن از طریق خط فرمان -5 -1

دستورات زیر را درخط فرمان وارد کنید. ،Client.exe به برنامه اجرایی Client.cs برای کامپایل کردن برنامه کنسولی

C:\>CSC Client.CS

C:\>CSC /t:exe client.CS

م  ی توان :t/ 4 نشان م ی دهد با سو ئیچ - هر دو دستور کد منبع را به یک فا یل اجر ایی کامپا یل م ی کنند. همانطور که جدول 1

نوع خروجی را مشخص کرد.

استفاده شود، کنسول به عنوان پیش زمینه برای آن ظاهر خواهد شد. t:exe/ ، در صورتی که برای برنامه های ویندوزی

#C 4- گزینه های انتخابی از کامپایلر - جدول 1

گزینه توصیف

MOHSEN_MAHYAR@YAHOO.COM

- C# برنامه نویسی

32

یک ماژول را برای درج در اسمبلی ایجاد شده مشخص می کند. ساده ترین روش ایجاد اسمبلی /addModule

چند فایلی است.

باعث می شود اطلاعات اشکال یابی تولید شوند. /debug

راهنماهای پیش پردازنده جهت انتقال به کامپایلر را مشخص می کند. /define define:DEBUG/

یک اسمبلی را با به تاخیر انداختن امضاء نام قوی ایجاد می کند. /delaysign

استفاده می شود. XML برای تعیین یک فایل خروجی جهت در برگرفتن مستندات /doc

مسیر فایل /keyfile را تعیین می کند، که زوج کلید استفاده شده برای امضاء نام قوی را در بردارد. snk.

محل اسمبلی هایی که درگزینه /lib شامل هستند را تعیین می کند. refrence/

نام فایل خروجی کامپایل شده را مشخص می کند. بطور پیش فرض نام همان فایل ورودی با /out

است. exe پسوند

/refrence به یک اسمبلی خارجی ارجاع می کند.

برای تعبیه کردن فایل های منبع به یک اسمبلی استفاده می شود. /resource

نوع فایل خروجی تولید شده را تعیین می کند. /target (t)

می سازد. این خروجی پی شفرض است. exe یک برنامه کنسولی t:exe/

ایجاد می کند. dll. یک اسمبلی t:library/

یک ماژول فایل اجرایی قابل حمل بدون اظهارنامه ایجاد می کند. t:module/

ایجاد می کند. exe یک اسمبلی ویندوزی t:winexe/

ارزش واقع ی کار با کامپ ا یلر خام ، توانا یی آن د ر کارکردن با چن د ین فا یل اسمبل ی است . برای نش ان دادن ای ن مور د ، دو ف ا ی ل

را ایجاد کنید. ClientLib.CS و Client.CS به نا مهای #C منبع

//Client.CS

using Sysyem ;

public class MyApp

{

static Vold Main (string[ ] args)

{

SnowName.ShowMe ( "Core C#");

}

}

//Clientlib.CS

using System ;

public class ShowName

{

public static void ShowMe (string MyName)

{

Console .write line (MyName);

}

}

را بر ای نوشتن ی ک پ ی ام به کنسول Clientlib یک تابع ا ز ،Client فهم جزئیات کد مهم نیست، فقط بدا نید که رو ت ین

می توانیم این رابطه را در چندین روش نمایش دهیم. #C فراخوانی می کند. با استفاده از کامپایلر

مثال 1: کامپایل کردن چندین فایل

NET. فصل اول- مقدمهای بر چارچوب

33

هر تعداد فایل منبع ورودی را پذیرفته و آنها را در یک فایل اسمبلی واحد ترکیب می کند. #C کامپایلر

CSC /out:client.exe client.CS clientlib.CS

مثال 2: ایجاد یک کتابخانه کد و استفاده آن

می تواند در یک کتابخانه ی مجزا قرار گیرد و توسط هر سرویس گیرنده ای دستیابی شود. Clientlib کد

CSC /t:library Clientlib.CS

را کامپایل کرده و به این اسمبلی خارجی ارجاع دهید. Client است. حال کد Clientlib.dll خروجی یک اسمبلی به نام

CSC /r:Clientlib.dll Client.CS

باز کن ید. می بینید که اظ ه ارنامهی آن ی ک ILdasm است . اگر شما این اسمبل ی را ب ا Client.exe خروجی یک اسمبل ی به نا م

دارد. Clientlib ارجاع به اسمبلی

مثال 3: ایجاد اسمبلی چندفایلی

بصورت یک فا یل مجزا بست ه بند ی Client.exe م ی تواند در داخل اسمب ل ی Clientlib ، به جا ی ایجاد یک اسمبل ی مجز ا

را به ی ک ماژول کامپا ی ل Clientlib.CS شود. چون فقط یک فایل در اسمبلی اظهارنامه امکان پذیر است. ابتدا لازم است

انجام می گیرد. t:Module/ کنیم. این عمل با انتخاب

CSC /t:module Clientlib.CS

این ماژول را به اسمب ل ی موردنظر addModule/ است . حال م ی توانید با سو ئیچ Clientlib.NETModule فایل خروج ی به نا م

اضافه کنید.

CSC /addModule:Clientlib.NETModule Client.CS

14 نشان - است. این مثال های ساده در شک ل 1 Clientlhb.NETModul و Client.exe اسمبلی منتج شده شامل دو ف ا یل

داده شده اند.

14- شکل 1

-6-1 خلاصه

همه کارهای مرت بط با کد اجر ایی را م د یریت م  ی کند . ابتدا مطم  ئن CLR . است FCL و CLR شامل NET. • چارچوب

است. سپس ی ک برنامه کاربر د ی را بارگذا ر ی کرده و همه CLR مطیع CLS می شود که کد براساس استاندارد

اسمبلی های وابسته آن را پیدا می کند.

را به کد ما ش ین محل ی تبد یل (NET. موجود در اسمب ل ی برنامه کاربر د ی (کوچکترین واحد کد قابل توسعه د ر IL ،JIT •

در حین اجرای برنامه واقعی امنیت، ریسمان ها، حافظه و جمع آوری زباله را مدیریت می کند. CLR . می کند

اسلام احمد زاده - 09177112161 - C# برنامه نویسی

34

باید در یک اسمبلی بسته بندی شوند. ،CLR • همه ی کدها جهت استفاده توسط

اسمبلی یک فا یل واحد یا گروه ی از چن د ین فا یل ف یزیکی است که به عنوان یک واحد منفرد د ر نظرگرفته م ی شود .

آن ماژول های کد را همانند فایل های منبع شامل می شود.

یک مجموعه از کلا س ها و انواع داده ای د یگر قابل استفاده مجدد را فراهم م ی کند، ک ه بر ای همه کده ا ی مط ی ع FCL •

در دسترس هستند. آن نیاز به کتابخانه های مختص یک کامپایلر را حذف می کند. CLR

ف یزیکی است که ه ز اران نوع داده را در بر م ی گیرند، آن به کمک فضاه ا ی نامی، DLL شامل چند ین فا یل FCL • اگرچه

یک ساختار منطقی روی همه انواع داده فراهم می کند.

مجموعه ای از برنام ه های سودمند دارد که NET. ، برای کمک به توسعه دهنده در امر اشکا ل یابی و آماده سازی نرم افزار

مدیر را قادر م ی سازد کارها یی از ق ب یل مد یریت اسمبل ی ها، اسمبلی های از پ یش کامپا یل شده، اضافه کردن فا یل ها به

یک اسمبلی و مشاهده جزئیات یک کلاس را انجام دهد.

با هدف کمک به پروسه توسعه فراهم ساخته است. OpenSource .NET • به علاوه تعداد زیادی ابزار

MOHSEN_MAHYAR@YAHOO.COM

 

   + MOHSEN GHASEMI - ۱۱:۳۱ ‎ب.ظ ; ۱۳۸٩/٤/۳