فرق متغیرهای object و dynamic در سی شارپ چیست ؟
سلام. لطفا بفرمایید فرق متغیرهای object و dynamic در سی شارپ چیست و از هر کدوم در چه شرایطی باید استفاده بشه.
پاسخ هوش مصنوعی
در زبان برنامه نویسی سی شارپ، متغیرهای object
و dynamic
هر دو برای نگهداری ارجاعات به اشیاء استفاده می شوند، اما تفاوت های مهمی بین آن ها وجود دارد.
متغیر object
:
- نوع داده
object
پایه ترین نوع داده در سی شارپ است و می تواند هر نوع اشیاء را نگهداری کند. - زمانی که شما متغیر را به عنوان
object
تعریف می کنید، برای استفاده از اعضای خاص یک نوع باید آن را به نوع مناسب قالب بندی (cast) کنید. - این متغیرها زمان کامپایل نوع ثابت دارند. به این معنی که با انجام بررسی های زمانی کامپایل، نوع واقعی متغیر شناخته می شود.
object obj = "Hello, World!";
string str = (string)obj; // نیاز به قالب بندی
متغیر dynamic
:
- نوع داده
dynamic
از C# 4.0 به بعد معرفی شده است و شما می توانید به آن هر نوع اشیاء را نسبت دهید. - زمانی که از
dynamic
استفاده می کنید، بررسی های نوع در زمان اجرا انجام می شود، بنابراین نیازی به قالب بندی وجود ندارد. - این گزینه برای کار با زبان های دیگر یا زمانی که نوع اشیاء دینامیک است و نمی خواهید در زمان کامپایل خطاهای مربوط به نوع داشته باشید، مناسب است.
dynamic dyn = "Hello, World!";
string str = dyn; // بدون نیاز به قالب بندی
در انتخاب بین object
و dynamic
، معمولاً اگر می دانید که نوع شیء در زمان کامپایل مشخص است، از object
استفاده کنید. و اگر با اشیاء یا داده های دینامیک کار می کنید، و نمی دانید که نوع آنها چیست، می توانید از dynamic
استفاده کنید.
تفاوت متغیر dynamic و object در سی شارپ
کاربرد متغیر dynamic در سی شارپ
در مورد متغیرهای dynamic در سی شارپ موارد زیر رو باید بدونید:
- این نوع از متغیرها در C# نسخه 4 به بعد معرفی شده است.
- در متغیرهای dynamic شما هر نوع مقداری را می توانید ذخیره کنید. (نحوه مدیریت متغیرها در ویژوال بیسیک هم همینطور بود.)
- این نوع متغیر اصلا ایمن نیست. چون کامپایلر هیچ نوع اطلاعاتی در مورد نوع آن ندارد.
- شما در ورودی توابع و متدها هم می توانید از متغیر dynamic استفاده کنید.
- وقتی به یک متغیر dynamic مقدار دهی می کنید نیاز به Cast و تبدیل نوع نیست. اما مهم است که بدانید با مقادیری که در این متغیر ذخیره کرده اید چگونه باید کار کنید.
- معمولا در مواردی که نیاز به مقایسه مقادیر یا ترکیب مقادیر با سایر مقادیر وجود دارد احتمال اشتباه بسیار بالا می رود چون کامپایلر تا لحظه انجام عملیات مقایسه یا ترکیب هیچ نوع اطلاعاتی در مورد نوع مقدار ذخیره شده در آن ندارد.
- در مواردی که نیاز به کدنویسی پویا یا کار با اشیای Com دارید که نوع آنها پیچیده یا غیرقابل تشخیص است استفاده از این نوع متغیر کمک بزرگی به شما خواهد کرد.
- همچنین استفاده از این متغیر حجم کدنویسی شما را کم می کند.
مثال زیر نحوه استفاده از متغیر dynamic را نشان می دهد :
public static void Main(string[] args)
{
dynamic dyn = "String Sample";
Console.WriteLine(dyn.Length); // correct
dyn = 1;
Console.WriteLine(dyn.Length); // Runtime Error
}
کاربرد متغیر object در سی شارپ
در مورد متغیر object هم موارد زیر رو بدونید :
- متغیر object از C# نسخه 1 معرفی شد.
- در متغیر object هر چیزی قابل ذخیره می باشد. در واقع پایه و چارچوب دات نت بر اساس object می باشد.
- این نوع متغیر ایمنی ضعیفی دارد چون کامپایلر اطلاعات کافی در مورد مقادیر آن ندارد.
- در ورودی توابع و متدها هم می توانید از متغیر object استفاده کنید.
- موقع استفاده از این نوع متغیر باید عملیات تبدیل نوع (Cast) انجام شود. اگر مقادیر Cast نشود موقع اجرا خطا دارید.
- استفاده از این نوع DataType زمانی مفید است که اطلاعات کافی در مورد مقادیر ندارید.
مثال زیر نحوه استفاده از متغیر object را نشان می دهد :
public static void Main(string[] args)
{
object obj = "String Sample";
Console.WriteLine(obj.Length); // compile error
Console.WriteLine(((string)obj).Length); // correct
}
نکته : تا جایی که برای شما مقدور است از این نوع DataType ها استفاده نکنید چون در Performance نرم افزار شما بشدت تاثیر گذار است.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول