تبلیغات
شمع آنلاین=منبع دانلود - C# 4.0، نگاهی به آینده - قسمت دوم

C# 4.0، نگاهی به آینده - قسمت دوم

نویسنده : Admin سه شنبه 19 مهر 1390 04:39 ب.ظ  •    ارسال شده در: آموزش c#

#C

پس از برگزاری كنفرانس PDC 2008 و معرفی تكنولوژی های جدید مایكروسافت، در سری مقالات C# 4.0، نگاهی به آینده ، به معرفی ویژگی های نسخه 4.0 زبان سی شارپ پرداخته ایم. در دومین مقاله از این سری ویژگی Variance مورد بحث و بررسی قرار گرفته است.

توجه داشته باشید كه تمام تكنولوژی فعلی در حال توسعه و تكامل می باشد و یكی از دلایلی كه مایكروسافت CTP آن را در اختیار عموم قرار داده است، دریافت نظرات و فیدبك های بیشتر به منظور ارائه جامع محصول نهایی می باشد. آنچه كه در سری مقالات C# 4.0، نگاهی به آینده ارائه می شود، بر پایه نسخه اولیه بوده و نام برگزیده شده برای این سری گویای این امر است.

سی شارپ و برنامه نویسی عام گرا

یكی از مفاهیم بسیار مهم در دنیای برنامه نویسی، امكان توسعه ساختارها و كلاس ها بدون وابستگی به نوع خاص می باشد. به این صورت كه ساختار یا كلاس بر اساس یك الگو (template) طراحی شده و نوع مشخصی هنگام نمونه سازی از آن ساختار یا كلاس جایگزین الگو می شود. این مفهوم تحت عنوان برنامه نویسی عام گرا (Generic Programming) مطرح بوده و كاربرد زیادی در توسعه كتابخانه ها و ساختمان داده ها دارد. به دلیل اهمیتی كه برنامه نویسی عام گرا برای هر زبان برنامه نویسی دارد، سی شارپ با ارائه نسخه 2.0 به پشتیبانی از آن پرداخت. ساختمان داده ها، واسط ها (interfaces) و نماینده های (delegates) جنریك تنوع و انعطاف زیادی را برای برنامه نویسان به همراه دارند. دیگر نیازی به استفاده از ساختمان داده هایی چون ArrayList - كه از مفهوم بسته بندی (boxing) برای نگهداری داده ها استفاده می كنند - نیست و می توان با تعریف List و نوع نگهدارنده ی آن، به سرعت عمل بیشتر و كدهای بهینه تر دست یافت. با این حال نكات ریزی در برنامه نویسی جنریك مطرح می باشند كه نسخه فعلی سی شارپ از آن ها پشتیبانی نمی كند. به عنوان مثال نمونه كد زیر را در نظر بگیرید:

image001.jpg

انتساب انجام شده در خط سوم درست نبوده و پیغام خطای آن نیز نمایش داده شده است. شاید این تصور ایجاد شود كه چون هر نوعی را می توان در object بسته بندی كرد، انتساب نیز به درستی صورت گرفته است. اگر فرض كنیم كه انتساب انجام شده درست بوده است می توان در ادامه كدی به صورت زیر نوشت:

دو خط كد بالا مفهوم محفوظ بودن نوع (type safety) را نقض می كنند. چرا كه به راحتی اجازه داده ایم نوع int وارد لیستی از نوع string شود.با این مقدمه به معرفی ویژگی Variance (واریانس) سی شارپ 4.0 می پردازیم.

كوواریانس (Covariance) و ضدواریانس (Contravariance)

از آنجایی كه واریانس مفهوم ظریفی را معرفی می كند، لازم است رابطه بین انواع مختلف را یك بار دیگر مرور كنیم. دو نوع T و U را در نظر بگیرید. بین دو نوع مذكور چهار نوع رابطه می تواند وجود داشته باشد:

·  نوع T از نوع U بزرگتر است

·  نوع T از نوع U كوچكتر است

·  نوع T معادل نوع U است

·  نوع T بی ارتباط با نوع U است

سه رابطه ی اول در سلسله ارث بری مطرح می باشند. سلسله جاندار <- پستاندار <- زرافه  را در نظر بگیرید. كلاس پستاندار از كلاس جاندار كوچكتر است چون زیركلاسی از آن می باشد. به همین ترتیب می توان گفت كه كلاس پستاندار از كلاس زرافه بزرگتر است.

واریانس در مواردی به كار برده می شود كه رابطه ای از نوع اول یا دوم بین انواع برقرار باشد. قبل از اینكه به بررسی مثال های واریانس بپردازیم، قوانین واریانس را مطرح می كنیم:

·  واریانس تنها بر روی نماینده ها (delegates) و واسط ها (interfaces) تعریف می شود.

· واریانس در مواردی قابل استفاده است كه تبدیل بین انواع از نوع مرجع (reference) باشد. مثلا تبدیل string به object از نوع مرجع بوده درحالیكه تبدیل int به object از نوع بسته بندی (boxing) است.

· از كوواریانس و ضدواریانس در كنار هم نمی توان استفاده كرد.

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

image003.jpg

با تعریف كوواریانس به صورتی كه در مثال بالا مشاهده می شود، CoObject = CoString انتساب درستی بوده كه خروجی زیر را به دنبال دارد:

image004.jpg

برای تعریف ضدواریانس از كلمه كلید in استفاده می شود. برعكس كوواریانس، ضدواریانس در مواردی تعریف می شود كه رابطه ی بین انواع از بزرگتر به كوچكتر باشد. با اندكی تغییر به مثال ضدواریانس توجه كنید:

image005.jpg

تعریف ضدواریانس به ما این اجازه را می دهد كه انتساب ContraString = ContraObject را انجام دهیم. خروجی زیر حاصل اجرای مثال ضدواریانس می باشد:

image006.jpg

كوواریانس و ضدواریانس از دیدگاه دیگری نیز قابل بررسی می باشند. كلمه كلیدی out در تعریف كوواریانس ایجاب می كند كه نوع جایگزین كننده قالب T همواره در موقعیت خروجی باشد.  به همین ترتیب در تعریف ضدواریانس، كلمه كلیدی in ایجاب می كند كه نوع جایگزین كننده قالب T همواره در موقعیت ورودی قرار گیرد. به منظور روشن شدن این دیدگاه به آخرین مثال تركیبی از كوواریانس و ضدواریانس در تعریف نماینده توجه كنید:

image007.jpg

همانطور كه مشاهده می شود آرگومان ورودی نماینده با استفاده از ضدواریانس و مقداربازگشتی با استفاده از كوواریانس تعریف شده است. این مثال خروجی زیر را تولید می كند:

image008.jpg

جمع بندی

مفاهیم، قوانین و نحوه استفاده از واریانس در سی شارپ 4.0 را بیان كردیم. حال ممكن است این سوال در ذهن مطرح شود كه چرا واریانس؟ در پاسخ باید گفت كه واریانس تنها برای پوشش دادن مفاهیمی كه تكمیل كننده برنامه نویسی عام گرا بوده و می بایست همراه نسخه 2.0 ارائه می شدند، به نسخه 4.0 اضافه شده است.

منابع بیشتر

در حال حاضر منابع محدودی در رابطه با ویژگی های جدید سی شارپ 4.0 موجود می باشند. مطالعه این منابع برای تسلط بیشتر و درك مفاهیم جدید توصیه می شود:

·         مجموعه مقالات Eric Lippert در رابطه با واریانس ( از ابتدا تا حال )

·         Generic Variance in C# 4.0

·         C# Future

قسمت اول سری C# 4.0، نگاهی به آینده اینجا ارائه شده است. 

كلام آخر

به اطلاع علاقمندان می رساند كه سفارش CTP Visual Studio 2010 برای اجرای كدهای ارائه شده در این مقاله و كار با C# 4.0 از طریق فروشگاه وب سایت امكانپذیر می باشد.

در پایان این مقاله از شما خواننده محترم دعوت می شود كه با انعكاس نظر خود در بخش پیام در ارائه بهتر كمی و كیفی مقالات آینده ما را همراهی كنید. قبلا از اظهار نظر شما كمال تشكر را دارم.

  نویسنده:الدینف

منیع:persiadevelopers



برچسب ها: آموزش ، آموزش برنامه نویسی ، c# ، آموزش c# ، C# 4.0 ،
آخرین ویرایش: چهارشنبه 20 مهر 1390 10:52 ب.ظ

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