8 ویژگی C # عالی که باید در مورد آنها بدانید – CloudSavvy IT


C # و .NET طی دو دهه گذشته به طور مداوم فعال بوده اند. هر ساله این زبان مجموعه ای از ویژگی های مفید جدید را دریافت می کند. ما در مورد برخی از موارد مورد علاقه خود بحث خواهیم کرد که فکر می کنیم مبتدیان باید بدانند.

انواع مرجع قابل تراز

C # بازنشانی شد ارزش برای مدتی تایپ کنید ، مانند ” int? ”، که ممکن است حاوی یا باشد int یا ارزش null، برخلاف سنتی int که همیشه مقدار پیش فرض آن صفر خواهد بود. آنها برای بسیاری از موارد مفید هستند ، از جمله کلاسهایی که برای غیرفعال کردن JSON طراحی شده اند ، جایی که همه زمینه ها نمی توانند حضور داشته باشند.

با این حال ، انواع مرجع همیشه می توانند اختصاص داده شوند null مقدار ، بنابراین این ویژگی جدید از C # 8.0 چه فایده ای دارد؟

انواع مرجع تسطیح پذیر اساساً نیاز به تمایز بین متغیرهای مرجع که می توانند صفر شوند و متغیرهای مرجع که نمی توانند وجود داشته باشد. این یک ویژگی ابتکاری است که احتمالاً پایگاه کد شما را با هشدارهای زیادی ترک می کند ، بنابراین این چیزی است که شما باید به صورت دستی روشن کنید. پس از روشن شدن ، کامپایلر شروع به تمایز بین:

  • string?، که می تواند صفر باشد و رفتار “پیش فرض” نسخه های قبلی را حفظ کند و
  • stringکه من نمی توانم صفر باشد هرگز نمی تواند null باشد زیرا باید مقدار پیش فرضی به آن داده شود و هرگز نمی تواند null تنظیم شود.

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

اگرچه این ممکن است محدود کننده به نظر برسد ، مشابه ورودی ثابت ، اما در نهایت کد بهتر و قابل استفاده تری به دست می آید. ما اکیداً برای اکثر پروژه ها فعال کردن آن را توصیه می کنیم و می توانید برای کسب اطلاعات بیشتر راهنمای کامل ما را در مورد آنها بخوانید.

برای روشن کردن آن ، باید پرونده پروژه خود را ویرایش کنید. در Visual Studio ، روی پروژه خود راست کلیک کرده و ویرایش پرونده پروژه را کلیک کنید. سپس آن را با دستورالعمل زیر وارد کنید:

<Nullable>enable</Nullable>

اگر از قالب پروژه قدیمی استفاده می کنید ، ممکن است لازم باشد به صورت دستی آن را با یک دستورالعمل در بالای هر پرونده جایگزین کنید:

#nullable enable

متصل: انواع مرجع C # چگونه کار می کنند؟

عملگرهای اتصال صفر و شرطی

به جای اینکه مجبور شوید بررسی کنید if(something == null)، C # یک استنوگرافی عالی با اپراتورهای دسترسی صفر دارد. به طور کلی ، به جای استفاده از نقطه دسترسی به چیزی که می تواند صفر باشد ، می توانید از یک علامت سوال و یک نقطه استفاده کنید که بررسی صفر را به طور خودکار انجام می دهد.

همچنین می توانید از آنها برای فراخوانی روش های اشیاull پوچ یا دسترسی به شاخص های آرایه صفر استفاده کنید. اگر جسم صفر باشد ، به سادگی هیچ کاری انجام نمی دهد و صفر برمی گرداند.

reference?.field
reference?.method();
reference?[N]

توجه داشته باشید که مورد دوم از IndexOutOfRangeException جلوگیری نمی کند – به سادگی به عنصر N یک لیست صفر ممکن دسترسی پیدا می کند.

با این حال ، ممکن است لازم باشد با مقادیر صفر برگردانده شده توسط این عبارت کار کنید و برای سهولت کار در C # عملگرهای ائتلاف صفر وجود دارد. درصورتیکه عبارتی (عبارت دلخواه) صفر برگردد می توان از آنها برای اختصاص یک مقدار جایگزین استفاده کرد. در اصل ، آنها مقادیر پشتیبان هستند. می توانید آنها را با علامت سوال دو نشان دهید:

string value = GetValue() ?? "Backup"

نیز وجود دارد ??= اپراتوری که به عنوان || زیرا اگر مقدار اول نتیجه صحیحی را بدست آورد ، مقدار ذخیره را تخمین نمی زند.

تاپلز

آیا تا به حال خواسته اید چندین مقدار را از یک روش برگردانید؟ با استفاده از تاپل می توانید و C # مدرن از C # 7.0 پشتیبانی زبانی خوبی از آنها می کند. فقط دو مقدار را که با پرانتز احاطه شده و با کاما از هم جدا شده اند ، بازگردانید و به عناصر جداگانه موجود در آنها دسترسی پیدا کنید.

اگرچه الزامی نیست ، اما دادن این نام ها مانند عادت معمول است (float X, float Y, float Z)، به جای دسترسی به آنها با شماره مورد.

همچنین می توانید برای تجزیه یک تاپل به چندین متغیر م componentلفه از تجزیه تاپل استفاده کنید.

این در واقع برای سازندگان ساده بسیار مفید است ، جایی که شما باید چندین فیلد برابر با آرگومان های ورودی را مشخص کنید. استفاده از ساختارشکنی تاپل کاملاً واضح به این مهم دست می یابد:

اضافه بار سازنده با: این ()

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

یک راه حل سریع و کثیف به اشتراک گذاشتن یک روش “مقداردهی اولیه کلاس” است که با تمام روش های طراحی بیش از حد فراخوانی می شود ، اما اگر انواع مختلف مرجع را فعال کرده باشید ، برای فیلدهای غیر برگشت پذیر که در واقع تنظیم شده اند ، به دلیل اینکه کامپایلر تنظیم نشده است ، اخطارهای لغو دریافت خواهید کرد. به اندازه کافی هوشمند است که می تواند مقدار دهی اولیه برای تماس های عملکرد کثیف را درک کند

اما یک راه حل برای این وجود دارد و کمی عجیب است. ناشی از ارث یک سازنده، که یکی دیگر از ویژگی های عالی است که به شما امکان می دهد سازنده کلاس پایه را گسترش دهید. از همان نحو وراثت استفاده می کند ، روده بزرگ و به دنبال آن base (parameters). با این کار سازنده اصلی (قبل از سازنده جدید) فراخوانی می شود. توجه داشته باشید که شما هنوز هم باید پارامترهای اساسی سازنده را در تعریف روش قرار دهید.

قسمت جالب این است که شما مجبور نیستید از آن استفاده کنید base؛ در واقع شما می توانید دقیقاً همان کار را با : this ()، که یک سازنده را در کلاس فراخوانی می کند. بدون کپی کردن از کد اولیه ، می توانید از این تنظیمات برای تنظیم پارامترهای اضافی استفاده کنید.

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

سازندگان ایستا

سازنده ها به طور معمول برای نمونه سازی کلاس ها با استفاده از استفاده می شوند new کلمه کلیدی. در سازنده ، می توانید فیلدهای مورد نیاز برای شروع کلاس را تنظیم کنید.

اما کلاسهای استاتیک چطور؟ خوب ، آنها در واقع می توانند از سازنده ها نیز استفاده کنند. در واقع ، کلاسهای معمولی می توانند از سازنده های ثابت برای تنظیم خصوصیات ثابت خود استفاده کنند.

با این حال ، آنها دقیقاً در هنگام راه اندازی کار نمی کنند. در حالی که مثال بالا درست به نظر می رسد ، تنظیمات startupTime در یک سازنده ثابت در زمان اجرا تضمین نمی شود ، زیرا C # و MSIL ای که روی آن اجرا می شود یک زبان کامپایل شده Just-In-Time است.

تدوین JIT فقط در زمان مشخص ، درست در زمان نیاز به کلاس اتفاق می افتد. این بدان معنی است که کلاس در گوشه مجموعه خود نشسته و گرد و غبار را جمع می کند تا زمانی که به یکی از زمینه ها یا روش های آن نیاز باشد. در صورت نیاز ، پیاده سازی .NET باعث گرد و غبار ، کامپایل و تنها پس از آن با سازنده ثابت تماس گرفته می شود.

با این حال ، سازنده ایستا قبلاً نیز کار می کند هیچ چی، حتی قبل از تنظیم فیلدهای ثابت و قبل از اینکه چیزی به آنها ارجاع شود. در صورت نیاز به آنها هنوز هم کاملاً مفید هستند. در غیر اینصورت ، اگر لازم است چیزی را به ترتیب زمانی اجرا کنید ، می توانید یک روش مقداردهی اولیه را از راه اندازی برنامه خود فراخوانی کنید.

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

شما قطعاً قبلاً با آنها روبرو شده اید ، گرچه ممکن است خودتان آنها را ننوشته باشید. پارامترهای متداول نوع به شما امکان می دهد توابع متناسب با نوع را بنویسید و به نوع منتقل شده برای آن اهمیتی نمی دهند. نمونه های اصلی این مجموعه ها است. آ List<string> و یک List<int> از همان کد استفاده کنید ، اما پارامترهای مختلف از یک نوع مشترک عبور می کند.

استفاده از مواد ژنیک کاملاً آسان است. فقط یک نام برای متغیر type در پرانتز به تعریف کلاس یا روش اضافه کنید. معمول این است که از T یا حداقل نام هایی که با T شروع می شوند استفاده کنید. به عنوان مثال ، فرهنگ لغت ممکن است دارای دو نوع مختلف TKey و TValue باشد.

Предавайте параметри на типа, като използвате синтаксис на скоби <T>. “width =” 458 “height =” 350 “onload =” pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (این)؛ “onerror =” this.onerror = null؛ pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon> (این)؛ “</p>
<p>همچنین می توانید از آنها در توابع استفاده کنید و اگر از پارامتر type به عنوان نوع آرگومان استفاده کنید ، حتی می تواند به صورت خودکار خارج شود.</p>
<p><img loading=

انواع عمومی انواع مختلفی از کلاس عمومی را ایجاد می کند. این بدان معنی است که فیلدهای استاتیک بسته به نوع کلاس جدا خواهند بود ، بنابراین List<string> داده ها را با List<int>.

بنابراین اگر می خواهید مستقیماً به نام کلاس مراجعه کنید ، باید یک پارامتر type به آن منتقل کنید. در برخی موارد ، این می تواند یک مشکل باشد ، بنابراین ، اگر شما نیاز به پشتیبانی از انواع مختلف دارید ، می توانید به آن منتقل کنید و از آن استفاده کنید object با استفاده از روشی بنام بوکس.

نمایندگان

نمایندگان راهی برای بسته بندی متغیرها هستند. این برای تزریق وابستگی مفید است ، که نام بسیار پیچیده ای برای یک مفهوم ساده است – کلاسهای انعطاف پذیر باید از متغیرهای طراحی خود مقادیری به نام وابستگی بگیرند ، به کاربر در آن کلاس اجازه می دهد تا وابستگی ها را به دلخواه تنظیم کند.

نمایندگان به شما امکان می دهند این کار را با ویژگی انجام دهید. شما می توانید کلاس را به انجام هر نوع عملی برسانید و او علاقه ای به عملکرد ندارد. آنها هنوز بصورت استاتیک وارد می شوند – شما باید پارامترهای ورودی و خروجی را مانند سایر عملکردها تعریف کنید ، به جز اینکه آن را با “نماینده” علامت گذاری کنید و متن را ننویسید.

برنامه با کد.

سپس می توانید تابعی را به این متغیر اختصاص دهید و سپس استفاده کنید متغیر برای فراخوانی عملکرد همانطور که نشان داده شده می توانید مستقیماً این کار را انجام دهید ، یا می توانید استفاده کنید myDelegate.Invoke()که همان کار را می کند ، اما با جزئیات بیشتر.

زمان اجرا NET بررسی می کند که نماینده به کدام روش اشاره کرده و آن را فراخوانی می کند.

اطلاعات بیشتر درباره نمایندگان را می توانید در راهنمای استفاده از آنها بخوانید.

نمایه سازی ها

کلاس ها در C # از زمینه ها و خصوصیات ذخیره داده استفاده می کنند تا این داده ها را در معرض کلاس های دیگر قرار دهند. Properties در واقع فقط روشی برای نمایش دادن یک قسمت است تا بتوانید از طریق آن آن را پیاده سازی کنید class.property.

برای نمایه سازی می توانید همین کار را انجام دهید ، به عنوان مثال class[index]. این می تواند برای ایجاد رفتار نمایه سازی کاربر استفاده شود. به عنوان مثال ، می توانید از 1D لیست 2 بعدی ایجاد کنید List<T> با ایجاد یک نمایه ساز سفارشی که مقداری را بر اساس آرگومان های ورودی برگرداند.


منبع: khabar-mehman.ir

دیدگاهتان را بنویسید

Comment
Name*
Mail*
Website*