دسته بندی ها
12:20 1403/10/13

فرق متغیرهای object و dynamic در سی شارپ چیست ؟

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 337
هوش مصنوعی

پاسخ هوش مصنوعی

در زبان برنامه نویسی سی شارپ، متغیرهای 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 استفاده کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 12:49 1403/10/13

تفاوت متغیر dynamic و object در سی شارپ

تفاوت متغیر 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 نرم افزار شما بشدت تاثیر گذار است.

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود