اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
2 سال پیش / خواندن دقیقه

آشنایی با نوع dynamic در سی شارپ + مثال کاربردی

با استفاده از کلمه dynamic در سی شارپ میتوان متغیر هایی را تعریف کرد که نوع آنها در زمان اجرا مشخص شوند (نه در زمان کامپایل). در این فصل با نوع داده ای dynamic در سی شارپ آشنا خواهیم شد.

نوع dynamic

سی شارپ در نسخه چهار به بعد نوع داده ای جدیدی را اضافه کرد که dynamic نام دارد. نوع متغیر هایی که به وسیله این نوع داده ای مشخص می شوند، در زمان اجرا تعیین خواهد شد (نه در زمان کامپایل). یک نوع داینامیک می‌تواند به وسیله کلمه کلیدی dynamic تعریف شود :

dynamic dynamicVariable = 1;

در بیشتر موارد کامپایلر نوع های dynamic را به نوع object تبدیل می‌کند. عبارت بالا به شکل زیر کامپایل خواهد شد :

object dynamicVariable = 1;

نوع واقعی یک متغیر داینامیک در زمان اجرا مشخص میشود. شما میتوانید نوع یک متغیر داینامیک را به شکل زیر بررسی کنید :

static void Main(string[] args)
{
    dynamic dynamicVariable = 1;
    Console.WriteLine(dynamicVariable.GetType().ToString());
}

خروجی نمونه مثال بالا به شکل زیر است :

System.Int32

یک نوع 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 variable value: 100, Type: System.Int32 Dynamic variable value: Hello World!!, Type: System.String Dynamic variable value: True, Type: System.Boolean Dynamic variable value: 01-01-2014, Type: System.DateTime

متدها و پروپرتی های یک نوع داینامیک

اگر شما شی ایی از یک کلاس را به یک نوع داینامیک انتساب دهید ، در اینصورت کامپایلر درستی نام متد ها و پروپرتی های نوع داینامیک را در زمان کامپایل بررسی نخواهد کرد. مثال زیر را در نظر بگیرید :

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();
    }
}

در مثال بالا شی از نوع Student را به یک نوع داینامیک انتساب داده ایم. سپس متدی به نام ()FakeMethod که درکلاس Student وجود ندارد را از شی مورد نظر فراخوانی کرده ایم. با این که ()FakeMethod متدی از کلاس Student نیست ، ولی خطایی را در زمان کامپایل دریافت نخواهیم کرد. بلکه این خطا در زمان اجرا به شکل زیر نمایش داده می شود:

 

آشنایی با نوع dynamic در سی شارپ + مثال کاربردی

نوع dynamic به عنوان پارامتر یک متد

یک متد می تواند شامل نوع dynamic به عنوان پارامتر باشد. در اینصورت متد مورد نظر می‌تواند در زمان اجرا هر نوعی را به عنوان پارامتر بپذیرد :

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);
    }
}

خروجی نمونه مثال بالا به شکل زیر است :

Hello World!! 100 100.50 True 01-01-2014 10:10:50

 



شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع