• linkedin
خوش آمدید , مهمان - ورود اینجا ثبت نام اینجا . فعال سازی حساب کاربری

Google


normal_post - تبدیل ضمنی   Implicit Conversions - متا نویسنده موضوع: تبدیل ضمنی Implicit Conversions  (دفعات بازدید: 3131 بار)

0 کاربر و 1 مهمان درحال دیدن موضوع.

آفلاین سید علا سبزپوش

xx - تبدیل ضمنی   Implicit Conversions - متا
تبدیل ضمنی Implicit Conversions
« : ۲۲ آذر ۱۳۸۹ - ۱۷:۴۷:۳۰ »
حتما در طول تجربه برنامه نویسی خود با مبحث تبدیل داده ها برخورد داشته اید ، برای مثال شاید بخواهید داده ای 8 بیتی را به داده ای 16 بیتی تبدیل کنید ، بدون آنکه اصل داده دچار تغییر شود .

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

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

 

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

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

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


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

 

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

مانند شکل زیر

Implicit2 - تبدیل ضمنی   Implicit Conversions - متا
در شکل بالا دقت کنید که چگونه عدد منفی 10 جایگزین و تبدیل شده است .
در مقاله بعد در مورد تبدیل صریح  (explicit) خواهم گفت .

Linkback: https://irmeta.com/meta/b622/t5739/
ما عاشق فهم و ادب ومعرفتیم،
ما خاک قدوم هر چه زیبا صفتیم،
http://math2easy.com

آفلاین سید علا سبزپوش

xx - تبدیل ضمنی   Implicit Conversions - متا
پاسخ : تبدیل صریح Explicit Conversions and Casting
« پاسخ #1 : ۲۳ آذر ۱۳۸۹ - ۱۲:۳۴:۵۶ »
هنگام تبدیل داده ها از نوع کوچکتر به نوع بزرگتر ، برای نوع بزرگتر بسیار آسان است که بیتهای نوع کوچکتر را در بر گیرد ، و بقیه بیت های خالی را با صفر و یک پر کند .اما برخی مواقع ممکن است تبدیل داده ها از نوعی به نوع دیگر راحت نباشد و یا کوچکتر باشد که شاید باعث از بین رفتن برخی داده ها می شود .اینجاست که ما باید از تبدیل صریح استفاده کنیم ، یعنی به برنامه توضیح دهیم که این تبدیل چگونه انجام شود ،برخلاف حالت قبلی که تبدیل اتوماتیک بود .

به شکل زیر دقت کنید که چگونه یک متغیر از نوع ushort  به متغیری از نوع byte  تبدیل می شود . مثلا اگر متغیر ما عدد 1365 از نوع ushort  باشد پس از تبدیل به نوع byte  بدلیل از دست دادن برخی بیتها به عدد 85 تغییر می کند .
explicit1 - تبدیل ضمنی   Implicit Conversions - متا


Casting

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

cast expression  استفاده کنیم .فرمت کلی آن به شکل زیر است .

cast - تبدیل ضمنی   Implicit Conversions - متا
Target type  بجای این عبارت و بین پرانتز شما باید نوع هدف را مشخص کنید ، یعنی داده شما به چه نوعی تغییر کند

 

source expression, همان متغیر شما است که دارای مقدار است و می خواهید آن را به نوع داده دیگری تغییر دهید .

 

پس وقتی شما از عبارت و فرمت بالا استفاده می کنید به صراحت اعلام می کنید که می خواهید داده های خود را (بر حسب نیاز خود حتی در صورت تغییر ) به نوع دیگری تبدیل کنید

شکل زیر نشان می دهد که چگونه یک متغیر ushort  به متغیری از نوع byte  تبدیل شده است ، اگر دقت کنید می بینید که در حالت اول عدد 10 در هر دو نوع گنجایش دارد لذا بدون تغییر ، به نوع دیگریی منتقل شده اما در حالت دوم عدد 1365 که گنجایش بزرگتری دارد لذا پس از تبدیل مقداری از بیتها حذف می شود و عدد 85 حاصل می شود .

cast2 - تبدیل ضمنی   Implicit Conversions - متا
ما عاشق فهم و ادب ومعرفتیم،
ما خاک قدوم هر چه زیبا صفتیم،
http://math2easy.com

آفلاین سید علا سبزپوش

xx - تبدیل ضمنی   Implicit Conversions - متا
پاسخ : User-Defined Conversions تبدیل تعریف شده توسط کاربر
« پاسخ #2 : ۲۷ آذر ۱۳۸۹ - ۱۲:۳۳:۴۶ »
یکی از امکانات جالب سی شارپ ، تعریف تبدیلات ضمنی و صریح implicit and explicit ، برای کلاسها و ساختارها مورد نیاز ، توسط کاربر است . به عبارت دیگر کاربر می تواند بر حسب نیاز خود تبدیلاتی را تعریف کند .در واقع ما می خواهیم امکانی به کلاس ما تعریف کنیم که در برخی مواقع بتوانیم در آن کلاس بر حسب نیاز خودمان برخی داده ها را تبدیل کنیم .

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

علاوه بر آن سطح دسترسی public  و static  باید باشد .

به ساختار زیر دقت کنید .
implicit_operator1 - تبدیل ضمنی   Implicit Conversions - متا


1-required  : همانطور که در بالا اشاره شد این بخش باید public static  باشد

2-کلمه کلیدی implicit and explicit ، به اضافه operator  فرقی نمی کند تبدیل ما صریح باشد یا ضمنی

3-  target  : قرار است که تبدیل هدف ما چه باشد ، یعنی نوع مورد نظر ما را همان target  تبدیل خواهد شد .

4-source  :   در واقع منبع تبدیل است ، یعنی قرار است چه داده ای تبدیل شود .

5- return ObjectOfTargetType: مقداری که باید برگردد ، یا همان مقدار برگشتی که باید از نوع همان داده مشخص شده در target  باشد.

 

اکنون به مثال زیر دقت کنید که چگونه متغیری از نوع person  به نوع عددی تبدیل می شود .


implicit_operator2 - تبدیل ضمنی   Implicit Conversions - متا

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

 

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

1-تبدیل تعریف شده توسط کاربر فقط برای کلاسها و ساختارها کاربر دارد.به عبارتی حتما درون کلاس یا ساختار تعریف می شوند .

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

3-پنج حالت زیر در مورد تبدیلات باید رعایت شود فرض کنیم s  یک منبع تبدیل یا همان source type  و T  یک نوع هدف target type متفاوت باشند

 

 *-S  و T  باید از دو نوع متفاوت باشند.

*- S  و T  نباید هیچ رابطه وراثت باهم داشته باشند .

*-S  و یا T  نباید اینترفیسی از یک object  دیگر باشند .

 

به مثال زیر دقت کنید .

implicit_operator3 - تبدیل ضمنی   Implicit Conversions - متا
یک کلاس person  داریم که در این کلاس 2 تبدیل تعریف شده داریم ، در تبدیل اول هر گاه پارامتر ما از نوع کلاس person  باشد به متغیر عددی تبدیل می شود

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

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


implicit_operator4 - تبدیل ضمنی   Implicit Conversions - متا

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

 

Person Info: bill, 25

چرا ؟ چون ما مشخص کردیم که هر وقت شی person  به خواهد به مقدار عددی تبدیل شود پارامتر p.Age  ارسال شود .

 

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

 

Person Info: Nemo, 35
ما عاشق فهم و ادب ومعرفتیم،
ما خاک قدوم هر چه زیبا صفتیم،
http://math2easy.com


اشتراک گذاری از طریق facebook اشتراک گذاری از طریق linkedin اشتراک گذاری از طریق twitter

xx
نرم افزار تبدیل کننده فایلهای پی دی اف به وود

نویسنده کـوکـبـی

1 پاسخ ها
2024 مشاهده
آخرين ارسال ۱۴ اسفند ۱۳۸۸ - ۰۰:۳۳:۳۹
توسط CIVILAR
xx
چگونه لپ‌تاپ خود را به یک WiFi Hotspot تبدیل

نویسنده A.Ehsani

0 پاسخ ها
1706 مشاهده
آخرين ارسال ۳۰ مرداد ۱۳۸۹ - ۱۰:۲۸:۱۶
توسط A.Ehsani
xx
نرم افزاری برای تبدیل PDF به word

نویسنده harand

4 پاسخ ها
2324 مشاهده
آخرين ارسال ۷ شهریور ۱۳۹۱ - ۲۰:۱۹:۱۱
توسط صادق کوکبی
xx
چگونه می توان فایل pdf را به word تبدیل کرد؟

نویسنده nadi

2 پاسخ ها
12312 مشاهده
آخرين ارسال ۲۳ فروردین ۱۳۹۱ - ۱۷:۴۴:۵۷
توسط صادق کوکبی
xx
چطور می تونم فایل dvr را ببینم یا تبدیل به mpg کنم

نویسنده marjan post zadeh

6 پاسخ ها
2423 مشاهده
آخرين ارسال ۷ مهر ۱۳۸۹ - ۲۱:۵۲:۵۳
توسط elahe
xx
رویای انتقال اطلاعات کوانتومی به حقیقت تبدیل شد

نویسنده CIVILAR

0 پاسخ ها
1496 مشاهده
آخرين ارسال ۴ اردیبهشت ۱۳۸۹ - ۰۲:۲۸:۴۶
توسط CIVILAR
 

anything