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

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

نوع های بی نام و یا همان Anonymous Type ها انواعی هستند که فاقد نامند. در واقع سی شارپ به اجازه میدهد اشیایی را تعریف کنیم که قبلا برای آنها کلاسی را تعریف نکرده ایم. در این فصل با نوع های بی نام در سی شارپ آشنا میشویم.

نوع های بی نام

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

static void Main(string[] args)
{    var myAnonymousType = new { firstProperty = "First",                                 secondProperty = 2,                                 thirdProperty = true                               };
}

در نمونه مثال بالا یک شی بی نام و سه پرو پرتی تعریف شده و در متغیر myAnonymousType قرار گرفته است. پروپرتی های تعریف شده در یک نوع بی نام فقط خواندنی هستند و نمی توان مقادیر آنها را تغییر داد. نوع های بی نام در اینتلیسنس ویژوال استودیو پشتیبانی می‌شوند :

 

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

دقت داشته باشید که کامپایلر برحسب مقادیر پروپرتی ها نوع آنها را تعیین خواهد کرد. برای نمونه در مثال بالا firstProperty دارای نوع string  و secondProperty دارای نوع int است. کامپایلر به صورت خودکار یک نوع جدید را برای انواع بی نام تولید خواهد کرد. می توان نوع یک نوع بی نام را به شکل زیر بررسی کرد :

static void Main(string[] args)
{
    var myAnonymousType = new { firstProperty = "First", 
                                secondProperty = 2, 
                                thirdProperty = true 
                              };
    Console.WriteLine(myAnonymousType.GetType().ToString());
}

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

<>f__AnonymousType0'3[System.String,System.Int32,System.Boolean]

انواع بی نام تو در تو

یک نوع بی نام می‌تواند به‌ عنوان پروپرتی شامل نوع بی نام دیگری باشد :

var myAnonymousType = new
                        {
                            firstProperty = "First",
                            secondProperty = 2,
                            thirdProperty = true,
                            anotherAnonymousType = new { nestedProperty = "Nested"}
                        };

حوزه دسترسی برای یک نوع بی نام

یک نوع بی نام در همان متدی که تعریف شده است قابل استفاده خواهد بود. معمولا نمی توان یک نوع بی نام را به متد دیگری ارسال کرد. با این حال می‌توان انواع بی نام را به متدهایی که دارای پارامتری از نوع dynamic هستند ارسال کرد. با این وجود این کار توصیه نمی‌شود :

static void Main(string[] args)
{
    var myAnonymousType = new
                            {
                                firstProperty = "First Property",
                                secondProperty = 2,
                                thirdProperty = true               
                            };
    DoSomethig(myAnonymousType);
}
static void DoSomethig(dynamic param)
{
    Console.WriteLine(param.firstProperty);
}

مثال بالا به شکل زیر است :

First Property

 


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

منوی سریع