تبدیل ضمنی (implicit) در سیشارپ #C چیست؟
برای درک بهتر مفهوم implicit conversion، تصمیم گرفتیم آموزش مربوط به این درس را از دوره جامع آموزش سیشارپ (مقدماتی) کنارتیم در اختیار شما قرار دهیم.
قبل از شروع باید در مورد Strongly Typed بودن یا Weakly Typed بودن بدونیم.
Strongly Typed بودن یعنی حساس بودن زبان برنامهنویسی به data typeها یا به فارسی نوع دادهها.
Strongly Typed و Weakly Typed بودن یک بازه است. بعضی زبانها به سمت Strongly Typed نزدیکتر هستند بعضی به Weakly Typed
مثلا C# یک زبانِ بیشتر Strongly Typed است و JavaScript بیشتر Weakly Typed، یعنی JavaScript حساسیت کمتری به نوعهای داده دارد.
مثال بزنم.
مثلا ممکن نیست که در C# بنویسیم:
12 + true
یعنی دستور زیر به خطا میخورد:
Console.WriteLine(12 + true);
چرا؟
چون C# شروع به تفسیر میکند که ۱۲ یک نوع عددی مثلاً int است و true یک مقدار Boolean، در نتیجه نمیتواند مقداری از نوع int را با bool جمع کند. (C# به نوع دادهها حساس است. – Strongly Type).
ولی عبارت 12 + true در زبان JavaScript محاسبه و چاپ میشود. (نتیجه چاپ شده در JavaScript برای این بحث مهم نیست ولی اگر کنجکاو هستید، عدد ۱۳ به عنوان نتیجه چاپ میشود.)
حالا که متوجه شدیم C# به نوعهای داده، حساسیت زیادی دارد. باید دقت کنید که در عبارت زیر:
int myIntVariable = 10;
long myLongVariable = myIntVariable;
وقتی مقدار myLongVariable را برابر myIntVariable قرار میدهیم. در واقع یک تبدیل اتفاق میافتد.
در واقع 10 که نوع دادهي int دارد به long تبدیل میشود. اما این تبدیل چون ساده است و هیچ ریسکی برای از دست رفتن اطلاعات ندارد، به صورت خودبهخودی انجام میشود.
تعریف
تبدیل ضمنی(implicit) یعنی تبدیل از نوع دادهای A به B ساده و بدون خطر از دست رفتن اطلاعات است. پس در نتیجه به صورت خودبهخودی انجام میشود.
میدانیم که در مثال قبل هر مقداری که در int باشد حتماً در long هم قابل پذیرش است.
مقدار قابل ذخیره در int از عدد 2,147,483,648– تا 2,147,483,647 است.
مقدار قابل ذخیره در long از عدد 9,223,372,036,854,775,808– تا 9,223,372,036,854,775,807 است.
پس این تبدیل بدون ریسک انجام میشود و ما هیچ اخطاری از طرف سیستم دریافت نمیکنیم.
توصیه میکنم ویدئوی مربوط به این بخش از دورهي مقدماتیC# است را مشاهده کنید.
در مقابل این نوع تبدیل، تبدیل صریح را داریم که در درس بعدی دوره تدریس شده است.