بررسی Dynamic Type در زبان برنامه نویسی سی شارپ

بررسی Dynamic Type در زبان برنامه نویسی سی شارپ

در این پست از وبسایت پرووید، در رابطه با بررسی Dynamic Type در زبان برنامه نویسی سی شارپ صحبت خواهیم کرد. به ادامه ی مطلب بروید.

در این قسمت از سری آموزش سی شارپ از وبسایت پرووید در رابطه با Dynamic Type صحبت خواهیم کرد. در سی شارپ ۴ و یا .Net 4.5 یک Data Type جدید مطرح شد که از Type Checking انجام شده در زمان Compile Time خودداری می کند. در بررسی var در زبان برنامه نویسی سی شارپ در رابطه با Var که با استفاده از آن می توانیم یک متغیر Implicitly Typed را ایجاد کنیم صحبت کردیم. با استفاده از Var می توانیم از Compiler بخواهیم که Data Type مربوط به متغیر را بر اساس Value و یا Expression انتساب داده شده به آن مشخص کند. برای درک هرچه بهتر Data Type ها در زبان برنامه نویسی سی شارپ از مطلب بررسی Data Type ها در برنامه نویسی سی شارپ استفاده کنید.

بسته ی آموزش ویدئویی مباحث پیشرفته در برنامه نویسی سی شارپ

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی مباحث پیشرفته در برنامه نویسی سی شارپ دیدن کنید.

و اما Dynamic Type ها در سی شارپ از Type Checking انجام شده در زمان Compile Time فرار کرده و عملیات مربوط به مشخص شدن Type متغیر در زمان Run Time انجام می شود. این موضوع شبیه به اتفاقی است که در زبان برنامه نویسی جاوا اسکریپ می افتد. در رابطه با جاوا اسکریپ از بسته ی آموزش ویدئویی جاوا اسکریپت از وب سایت پرووید استفاده کنید.

تفاوت اصلی بین زبان برنامه نویسی سی شارپ و جاوا اسکریپت در این است که زبان جاوا اسکریپت به صورت Dynamic Type و زبان برنامه نویسی سی شارپ به صورت Static Type عمل می کند. در ادامه با استفاده از کلمه کلیدی Dynamic اقدام به ایجاد کردن یک متغیر با نام Dynamic Variable کرده ایم. لطفا کد زیر را ببینید.

dynamic dynamicVariable = 1;

در زمان Compile شدن برنامه اکثر متغیرهایی که به صورت Dynamic تعریف شده اند به Object تبدیل می شوند. به عبارت دیگر دستور بالا به صورت زیر Compile خواهد شد.

object dynamicVariable = 1;

اما Type واقعی یک متغیر که به صورت Dynamic تعریف شده است در زمان Run Time مشخص می گردد. به عبارت دیگر می توانیم با استفاده از کد زیر نوع داده ای و یا Data Type متغیر dynamicVariable که به صورت Dynamic تعریف شده را مشخص کنیم.

static void Main(string[] args)
{
    dynamic dynamicVariable = 1;

    Console.WriteLine(dynamicVariable.GetType().ToString());
}

خروجی این کد شبیه به تصویر زیر خواهد بود.

et the actual type of dynamic type at runtime - بررسی Dynamic Type در زبان برنامه نویسی سی شارپ

نکته دیگر این که Type مربوط به یک متغیر که از نوع Dynamic تعریف شده است در زمان Run Time می تواند تغییر کند. این موضوع براساس Value و یا Expression که در سمت راست تساوی قرار داده اید اتفاق می افتد. کدی که در قسمت زیر مشاهده می کنید نحوه تغییر کردن Type مربوط به یک متغیر Dynamic را براساس مقدار انتساب داده شده به آن نشان می دهد.

static void Main(string[] args)
{
    dynamic dynamicVariable = 100;
    Console.WriteLine("Dynamic variable value: {0}, Type: {1}",dynamicVariable, dynamicVariable.GetType().ToString());

    dynamicVariable = "Hello World!!";
    Console.WriteLine("Dynamic variable value: {0}, Type: {1}", dynamicVariable, dynamicVariable.GetType().ToString());

    dynamicVariable = true;
    Console.WriteLine("Dynamic variable value: {0}, Type: {1}", dynamicVariable, dynamicVariable.GetType().ToString());

    dynamicVariable = DateTime.Now;
    Console.WriteLine("Dynamic variable value: {0}, Type: {1}", dynamicVariable, dynamicVariable.GetType().ToString());
}

خروجی این کد شبیه به تصویر زیر خواهد بود.

dynamic - بررسی Dynamic Type در زبان برنامه نویسی سی شارپ

بررسی Method ها و Property های یک Dynamic Type

اگر یک Object از یک کلاس را به یک متغیر Dynamic انتساب دهید، کامپایلر، متد ها و یا پروپرتی ها و نام های آن ها را در زمان Compile چک نمی کند. برای مشخص شدن این مفهوم به کد زیر نگاهی بیندازید.

public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public int Age { get; set; }
    public int StandardID { get; set; }

    public void DisplayStudentDetail()
    {
        Console.WriteLine("Name: {0}", this.StudentName);
        Console.WriteLine("Age: {0}", this.Age);
        Console.WriteLine("Standard: {0}", this.StandardID);
    }
}

class Program
{
    static void Main(string[] args)
    {
        dynamic dynamicStudent = new Student();

        dynamicStudent.FakeMethod();
    }
}

همان طور که در کد بالا مشاهده می کنید یک Object از کلاس Student را به متغیر dynamicStudent انتساب داده ایم و پس از آن یک متدبا نام FakeMethod را صدا زده ایم. مشخص است که متد FakeMethod در کلاس  Student تعریف نشده است اما این موضوع در زمان Compile هیچ خطایی را ایجاد نمی کند و این به این دلیل است که Dynamic Type ها در زمان Compile از عملیات Type Checking فرار می کنند. در زمان Run Time برنامه با رخ دادن یک Exception متوقف می شود. در رابطه با روند Exception Handling و یا مدیریت استثناها از بسته ی آموزش ویدئویی مدیریت خطاها در سی شارپ با Exception Handling استفاده کنید. خروجی این کد شبیه به تصویر زیر خواهد بود:

استفاده از یک Dynamic Type به عنوان پارامتر یک متد

جالب است بدانید که پارامتر متدها می توانند به صورت Dynamic Type تعریف بشوند. این موضوع باعث می شود که در زمان Run Time بتوان هر Type مورد نظری را به عنوان پارامتر ورودی به آن متد تحویل داد. برای درک هرچه بهتر این موضوع کد زیر را ببینید.

class Program
{    
    static void PrintValue(dynamic val)
    {
        Console.WriteLine(val);
    }

    static void Main(string[] args)
    {

        PrintValue("Hello World!!");
        PrintValue(100);
        PrintValue(100.50);
        PrintValue(true);
        PrintValue(DateTime.Now);
    }
}

خروجی این کد شبیه به تصویر زیر خواهد بود.

dynamic as a Parameter - بررسی Dynamic Type در زبان برنامه نویسی سی شارپ

به طور خلاصه باید بگوییم که ماهیت Dynamic Type ها به جای مشخص شدن در زمان Compile Time در زمان Run Time مشخص می شوند. به عبارت دیگر روند Type Checking که توسط Compiler در زمان Compile برنامه اتفاق می افتد برای Dynamic Type ها انجام نمی شود و هیچ خطایی در زمان Compile برای Dynamic Type ها ایجاد نخواهد شد. در صورت استفاده از Dynamic Type ها قابلیت Intellisense در Visual Studio برای آن ها غیرفعال خواهد بود. نهایتاً بررسی کردیم که یک متد می تواند پارامترهایی داشته باشد که از نوع Dynamic Type باشند. در صورت استفاده کردن از یک Method و یا یک Property که تعریف نشده باشد در زمان Compile خطایی رخ نمی دهد اما در زمان Run Time یک Exception تولید خواهد شد.

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

مرتضی گیتی
بدون نظر

ارسال نظر

نظر
نام
ایمیل
وب سایت