Negarsoft’s

سپتامبر 2, 2008

برنامه نویسی به زبان c# قسمت پانزدهم

دسته‌بندی شده در: آموزش برنامه نویسی به زبان C# — negarsoft @ 9:44 ق.ظ.

ترویج آرگومان

 

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

چنین تبدیلاتی نیز می تواند با کلاس convert در فضای نام System  انجام شوند

.c# از تبدیلات عریض و باریک پشتیبانی می کند.تبدیل عریض هنگامی رخ می دهد که یک نوع به سایر انواع تبدیل شود( معمولا انواعی که می توانند داده های بیشتری را نگهداری کنند) بدون اینکه داده ای از بین برود و تبدیل باریک هنگامی روی می دهد که داده ممکن است در طی تبدیل ازبین برود( معمولا به انواعی که داده کوچک تری را نگهداری میکنند). جدول زیر تبدیلات ضمنی مجاز را نمایش می دهد.

می توانند به نوع (یا انواع) تبدیل شوند

type

Object

Bool

Decimal, double, float, int, uint, long, ulong, object, short or ushort

Byte

Decimal, double, float, int, long, object or short

Sbyte

Decimal, double, float, int, uint, long, ulong, object or ushort

Char

Object

Decimal

Object

Double

Double or object

Float

Decimal, double, float, long or object

Int

Decimal, double, float, long, ulong, or object

Uint

Decimal, double, float or object

Long

Decimal, double, float or object

Ulong

Decimal, double, float, int, long or object

Short

Decimal, double, float, int, uint, long, ulong or object

Ushort

مثلا متد sqrt کلاس Math  می تواند با یک آرگومان صحیح فراخوانی شود، حتی اگر این متد در کلاس Math تعریف شده باشد تا یک آرگومان double را بگیرد. عبارت:

Console.WriteLine( Math.Sqrt(4));

Math.Sqrt(4) را به طور صریح ارزیابی کرده  و مقدار 2 را نمایش می دهد. C# به طور ضمنی مقدار 4 از نوع int را به مقدار 4.0 از نوع double تبدیل می کند، پیش از اینکه آن مقدار را به Math.Sqrt ارسال کند.در برخی موارد، c# تبدیلات ضمنی را برای مقادیر آرگومانی اعمال میکند که به طور دقیق با انواع پارامتر در تعریف متد متناظر نباشند.در برخی موارد، تلاش برای این تبدیلات منجر به خطاهای کامپایلری می شود.زیرا c# ار قوانین تبدیل ضمنی برای تعیین زمان روی دادن یک تبدیل عریض استفاده می کند. در مثال Math.Sqrt قبل، C# یک int را بدون تغییر مقدار آن به double تبدیل کرد.به هر حال، تبدیل یک double به یک int، بخش عملیاتی مقدار double را قطع می کند.تبدیل انواع صحیح بزرگ به انواع صحیح کوچک نیز می تواند مقادیر را تغییر دهد.چنین تبدیلات باریکی ممکن است داده ها را تغییر دهند.

بنابراین، c# تبدیلات باریک را بدون یک عمل تبدیل صرح مجاز نمی داند.

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

تبدیل مقادیر به انواع کوچک تر ممکن است باعث از بین رفتن داده ها بشود. در مواردی که اطلاعات ممکن است در طی تبدیل از بین بروند، کامپایلر نیاز دارد که برنامه نویس از تبدیل برای اعمال فشار جهت روی دادن تبدیل استفاده کند.برای احضار متد square که یک پارامتر صحیح با متغیر y از نوع double می گیرد. فراخوانی متد به صورت زیر نوشته می شود:

Int result= Square((int)y);

این عبارت به طور صریح یک کپی از مقدار  y را به یک عدد صحیح برای استفاده در متد square تبدیل می کند. بنابراین، اگر مقدار y برابر 4.5 باشد، متد Square، 16 را برمی گرداند و نه 20.25 را.

توجه: هنگامی که یک تبدیل باریک را انجام می دهید (مثل double به int ) ، تبدیل مقدار یک نوع داده اصلی به نوع داده اصلی دیگر ممکن است باعث از بین رفتن داده ها شود.

 

 

اما چه رنجی است لذت ها را تنها بردن و چه زشت است زیبایی ها را تنها دیدن و چه بدبختی آزاردهنده ای است تنها خوشبخت بودن! در بهشت تنها بودن سخت تر از کویر است.

 ( دکتر علی شریعتی )

 

۱ دیدگاه »

  1. مطالب جالب و مفیدی هستند.
    در ضمن با توجه به فیلتر شدن وردپرس بهتره مطالبت را از اینجا نجات بدی و به جای دیگری منتقل کنی.
    اگر در زمینه انتقال سوال داشتی میتونم کمک کنم.
    موفق باشی.

    دیدگاه توسط حمید — آوریل 27, 2011 @ 4:07 ب.ظ. | پاسخ


خوراک آراِس‌اِس دیدگاه‌های‌ این نوشته. شناساگر دنبالک

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

پوسته: Rubric. وب‌نوشت روی وردپرس.کام.

دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.