بیان ضمنی نوع متغیر و انواع بی نام

شنبه 24 شهریور 1397

بیان ضمنی نوع متغیر و انواع بی نام از دسته مسائل بسیار مهم در برنامه نویسی محسوب می شود. با تغییر کد می توان بیان ضمنی نوع متغیر را به طور دقیق فراهم ساخت.

 بیان ضمنی نوع متغیر و انواع بی نام

در این مقاله قصد ما این است که به طور دقیق بررسی کنیم که چطور می توان نوع متغیر را به صورت ضمنی معرفی کرد. در واقع با بررسی کد محور این موضوع شرایط استفاده از انواع بی نام به طور دقیق دنبال می شود.

اصول بیان ضمنی نوع متغیر و انواع بی نام

برای اینکه بتوانیم نوع متغیر را به صورت ضمنی بیان کنیم باید به جای string از نوع داده Var استفاده کنیم. در نظر داشته باشید که Var از دسته داده ای محسوب می شود که کامپایلر به صورت خودکار می تواند نوع داده را تشخیص دهد.

فرض کنید که قرار است اطلاعات از بخش کنترلر به ویو ارسال شود به این ترتیب نیاز به استفاده از ViewData است. این ابزار بهترین گزینه برای انتقال اطلاعات محسوب می شود.

در زیر قطعه کدی نوشته شده است که توضیحات لازم را در قالب برنامه نویسی نشان می دهد. ساختار بیان ضمنی نوع متغیر آسان است.



using System;

using System.Collections.Generic;

using System.Linq;

using Microsoft.AspNetCore.Mvc;

using LearnCSharp.Models;

 

namespace LearnCSharp.Controllers

{

    public class HomeController : Controller

    {

        public IActionResult Sample1()

        {

            var names = new[] { "Kayak", "Lifejacket", "Soccer ball" };

            ViewData["Products"]= names;

            return View();

        }

    }

}

توضیحات تکمیلی عملکرد بیان ضمنی نوع متغیر

در نظر داشته باشید که در قطعه کد قبلی از متغیر Names استفاده شده است که به ظاهر اینطور به نظر می رسد که دارای نوع نیست. در واقع معنی آن به این صورت است که کامپایلر می تواند نوع names را تشخیص دهد، در واقع در کد مشخص شده است که نوع Names یک آرایه از نوع string است و این موضوع تأکید می کند که کامپایلر می تواند به صورت خودکار تشخیص دهد که نوع داده به چه صورتی است.

در مرحله بعد می بایست یک View ایجاد شود که برای اینکار باید از کدهای زیر استفاده کرد. همانطور که در کد دیده می شود از حلقه foreach استفاده شده است تا بتواند پیمایش صحیحی صورت بگیرد و در نهایت نیز خروجی به چاپ برسد. قوانین بیان ضمنی نوع متغیر مشخص است.




@{

Layout = null;

}


 

<ul>

@foreach (var item in ViewData["Products"] as string[])

{

    <li>

       @item

   </li>

}

</ul>

خروجی این برنامه به صورت زیر است:

Kayak

Lifejack

Soccer ball

کاربرد بیان ضمنی نوع متغیر و انواع بی نام

پس از بررسی بیان ضمنی نوع متغیر، حال نوبت به بررسی انواع بی نام است. در این روش باید از مقداردهی آغازین و انواع بین نام استفاده شود به این ترتیب می توان اشیایی فراهم ساخت تا بتواند اطلاعات را بین کنترلر و نما بدون نیاز به یک کلاس فراهم سازد. در نظر داشته باشید که بیان ضمنی نوع متغیر باید به طور دقیق اعمال شود.

در این بخش نیز قطعه کدی مدنظر است که می تواند به شما کمک نماید.



using System;

using System.Collections.Generic;

using System.Linq;

using Microsoft.AspNetCore.Mvc;

using LearnCSharp.Models;


 

namespace LearnCSharp.Controllers

{

    public class HomeController : Controller

    { 

        public IActionResult Sample2()

        {

            var products = new[]

            {

                new {Name="Kayak",Price=275M},

                new {Name="Lifejacket",Price=48.95M},

                new {Name="Soccer ball",Price=19.50M},

                new {Name="Corner flag",Price=34.9M},

            };

            ViewData["Products"] = products.Select(p => p.Name);

            return View();

        }

    }

}

در این کد برای هر یک از اشیا یک آرایه جداگانه در نظر گرفته شده است که از نوع بی نام است. در واقع این موضوع نشان می دهد که نوع مورد نظر به صورت اتوماتیک توسط کامپایلر مشخص می شود.بیان ضمنی نوع متغیر باید بخش بندی شود. پس از این مورد می بایست یک view برای اکشن متد دوم فراهم شود.



@{

Layout = null;

}


 

<ul>

@foreach (var item in ViewData["Products"] as IEnumerable<string>)

{

    <li>

       @item

   </li>

}

</ul>

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

Kayak

Lifejack

Soccer ball

Corner flag

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

تغییر کد بیان ضمنی نوع متغیر برای ایجاد خروجی

در بخش قبل در خصوص خاصیت های هم نام صحبت شد، توجه کنید که به دلیل اینکه نوع کلاس و همینطور نوع در بر گیرنده، این خاصیت ها در زمان کامپایل فراهم می شود، به جز استفاده از var راه دیگری نخواهد بود که با تغییر کد می تواند کاری کرد که به جای مقادیر از انواع ایجاد شده برای خروجی استفاده نماید.بیان ضمنی نوع متغیر باید طبق اصول انواع بی نام فراهم شود.



using System;

using System.Collections.Generic;

using System.Linq;

using Microsoft.AspNetCore.Mvc;

using LearnCSharp.Models;


 

namespace LearnCSharp.Controllers

{

    public class HomeController : Controller

    {

        public IActionResult Sample3()

        {

            var products = new[]

            {

                new {Name="Kayak",Price=275M},

                new {Name="Lifejacket",Price=48.95M},

                new {Name="Soccer ball",Price=19.50M},

                new {Name="Corner flag",Price=34.9M},

            };

            ViewData["GetType"] = products.Select(p=>p.GetType().Name);

            return View();

        }

    }

}

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

با این حال یک view دیگر طبق کدنویسی زیر مشخص می شود.



@{

Layout = null;

}


 

<ul>

@foreach (var item in ViewData["GetType"] as IEnumerable<string>)

{

    <li>

       @item

   </li>

}

</ul>

در نظر داشته باشید که اجرای برنامه نشان می دهد که تمامی اشیا داخل آرایه هایی به نوع یکسان قرار دارند.

خروجی هم می تواند طبق نوشته های زیر فراهم شود.



<>f__AnonymousType0`2

    <>f__AnonymousType0`2

    <>f__AnonymousType0`2

    <>f__AnonymousType0`2

جمع بندی

در این مقاله در خصوص بیان ضمنی نوع متغیر صحبت شد و مشخص شد که می تواند با تغییر کدهای موجود به سادگی انواع بی نام را نیز وارد کرد. مثال هایی آورده شد و تغییرات لازم نیز مشخص شد. بیان ضمنی نوع متغیر می تواند بخشی از کدنویسی را آسانتر نماید. شرایط بیان ضمنی نوع متغیر باید به طور دقیق دنبال شود.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید