صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

تبدیل ضمنی Implicit Conversions

تبدیل ضمنی   Implicit Conversions

 

حتما در طول تجربه برنامه نویسی خود با مبحث تبدیل داده ها برخورد داشته اید ، برای مثال شاید بخواهید داده ای 8 بیتی را به داده ای 16 بیتی تبدیل کنید ، بدون آنکه اصل داده دچار تغییر شود .

تبدیل داده ها در سی شارپ بر دو نوع است *-ضمنی  implicit   *-صریح   explicit

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

 

1-هنگام تبدیل  از نوع کوچکتر ( نوع با تعداد بیت کمتر) به نوع بزرگتر (نوع با بیت بیشتر ) بیتهای بیشتر باید با صفر و یک پر شوند.

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

شکل زیر بسیار گویا است .



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

 

نکته : اگر هنگام تبدیل نوع کوچکتر به نوع بزرگتر ، داده ما دارای علامت مثبت یا منفی بود ، آنگاه بیتهای بیشتر با بیت علامت پر می شوند ، علامت مثبت ، یک علامت پیش فرض است لذا بیتهای آن صفر است اما علامت منفی بیتهای آن عدد یک است .

مانند شکل زیر

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

در مقاله بعد در مورد تبدیل صریح  (explicit) خواهم گفت .

من ، من ، من ، من ،من ،من

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

 

اینترنت تعطیل است !!!!

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

این 6 من چیست ، من حق می دهم به تمام میران شرکتها و حق می دهم به پرسنل لذا می خواهم از زبان من بودن در هر موقعیتی بنویسم

 

1-من مالک شرکت خصوصی و مدیر شرکت هستم : من این شرکت را با زحمات زیادی تاسیس کردم ، من برای شما اشتغال ایجاد کردم ، من باید تلاش کنم تا حقوق شما را فراهم کنم ، من بابت شما باید هزینه ، بیمه ، مالیات پرداخت کنم ، من باید تلاش کنم تا فروش شرکت بالا برود و بتوانم با درآمد آن هزینه های شما را فراهم کنم ، من مسئول رفتارهای شما هستم ، اگر کار نکنید ضرر می کنم ، دیگر نمی توانم به شما حقوق بدهم ، شما مجبور می شوید به جای دیگری بروید ، من استرس زیادی دارم چون مسئولیت من سنگین است ، من اعتبارم را پای این کار گذاشته ام ، اگر مشکلی پیش بیاد اول از هم اعتبار من خراب می شود ،اصلا اگر اوضاع خراب شد و من بدهی بالا آوردم من باید برم زندان ، من باید برای وصول مطالبات شرکت بجنگم ، من برای گرفتن پروژه و کار برای شرکت باید بجنگم ، خوب من مجبورم شما را محدود کنم ، پس خوت را بزار جای من ،

 

2-من مدیر شرکت هستم اما مالک آن نیستم : من از طرف مالک و سرمایه گذاری، مدیر این شرکت شدم ، اگر کارمندان من کار نکنند ، من جواب مالک را چه بدهم ، من باید جواب مشتریان را بدهم ، من هم مثل شما کارمندم با این تفاوت که مدیر شما هستم ، شما فقط کار خودت را انجام می دهی ، اما من باید با همه سروکله بزنم ،مشتری ، سرمایه گذار و مالک شرکت و اداره دارایی و بیمه و ..

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

 

3-من مدیر بخش تولید نرم افزار هستم : من باید به مدیر بالاتر از خودم جواب بدهم ، اگر کیفیت کار کارمندانم خوب نباشد ، من توبیخ می شوم شاید هم اخراج شاید هم جریمه ، من هم مثل شما کارمندم فقط بیشتر از شما تجربه و دانش دارم ، من باید پاسخگو باشم ، اگر مشتریان ناراضی باشند یعنی شما بد کار کرده اید اول از هم با من برخورد می کنن ، پس من حق دارم شما را محدود کنم

 

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

 

5-من تحلیل گر پروژه هستم : من خیلی با مشتریان سر تشخیص نیازمندیها و اولویت بندی آنها سرو کله زدم ، من باید ذهن مشتری را بخوانم ، من حلقه وصل بین شما برنامه نویسان و مشتریان هستم ،من کار خودم را بلدم ، اگر کار شما بد باشه ، به من گیر می دن ، میگن شما بد تحلیل کردی ، نه اینطوری نیست من کارم درسته ، نیازمندیهای مشتری را خوب تحلیل کردم ، مستند کردم و با زبان ساده و روان به شما منتقل کردم ، پس شما باید خوب کار کنید ، تا کیفیت نرم افزار عالی باشد . من مجبورم از مدیرتان بخواهم شما را محدود کنه ، آخه من به مشتری قول دادم که طبق تحلیل من این پروژه 3 ماهه تحویل بدیم ، پس لطفا شبانه روزی کار کنید تا من جلوی مدیران بالاتر شرکت و مشتریان شرمنده نشوم ، من معتقدم شماها باید محدود شوید

 

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

 

6-من برنامه نویس شرکت هستم ، شما مرا محدود کردید ، موبایل ممنوع ، اینترنت محدود ، استراحت قدغن و....

اما

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

بعضی از سایتها از نظر شما سرگرمی است اما از نظر من وسیله ای است برای ارتباط با دیگر متخصصان برای گرفتن راهنمایی

بعضی تماسهای موبایل ، برای من حیاتی است من هم مثل همه شماها خانواده دارم ممکن است نگرانشان باشم ، کار مهمی داشته باشم ، خوب من هم حق دارم

من ادم آهنی نیستم ، یعنی حتی اگر روبات و آدم آهنی باشم باز هم فرسوده می شوم ، نیاز به تعمیر دارم ، خوب من نمی تونم صبح تا شب فقط به مانیتور نگاه کنم ، شرط می بندم شما هم نمی توانید ، من بدنم هر یکی ، دو ساعت نیاز به حرکت داره ، کمرم از نشستن پیوسته پشت میز ، درد گرفته ، از بس به مانیتور نگاه کردم چشمام ضعیف شده سر درد گرفتم ، بابا من تشنه ام یکی نیست برام لیوان آب بیاره !!!!!

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

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

و............

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

ودردی بی درمان خواهد ماند.

Extension Methods

شاید تاکنون برای شما اتفاق افتاده باشد که می خواهید متدی را به کلاسی اضافه کنید اما با مشکلات زیر مواجه هستید :

 

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

2-کلاس شما اجازه ارث بری ندارد   sealed است ، شما نمی توانید کلاس دیگری ایجاد کنید و از آن ارث بری کنید

 

اما شما نیاز مبرم دارید به اینکه به کلاس مورد نظرتون متدی را اضافه کنید ، خوشبختانه از سی شارپ 3 ، متدهای توسعه یافته Extension Methods مشکل فوق را براحتی حل کرده است .

 

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




همانطور که می بینید ما یک کلاس داریم به نام mydata   این کلاس اجازه ارث بری را به هیچ کلاس دیگری نمی دهد اما حالا ما بر حسب ضرورت ما می خواهیم متدی را به آن اضافه کنیم ، برای اینکار حتما باید رویه زیر را انجام دهیم .

 

1-ابتدا یک کلاس استاتیک تعریف می کنیم تاکید می شود که حتما کلاس ما استاتیک باشد مانند کلاس مثال بالا ExtendMyData

 

2-متدی را تعریف می کنیم که این متد ، اولا باید حتما استاتیک باشد و ثانیا حتما اولین پارامتر آن از نوع this  باشد و بعد از کلمه کلیدی this  نام کلاس ذکر شود .

 

اکنون متد ما آماده است هر جا لازم بود می توانیم براحتی با تعریف متغیری از نوع کلاس mydata  براحتی متد بالا را فراخوانی کنیم .

 

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



برگرفته از کتاب Illustrated C# 2008 از انتشارات apress