این مقاله برای هر کسی که می خواهد تخصص خود را در دات نت ثابت کند عالی است!
سلام به توسعه دهندگان دات نت،
در این مقاله، مفاهیم مختلف C# را که هر توسعهدهندهای باید بداند، بررسی میکنم. همیشه این ایده خوبی است که دانش خود را آزمایش کنید و من چند نمونه را در این مقاله با توضیحات و مثال های کد گردآوری کرده ام.
اگر نمونههای کد را میدانید و درک میکنید، احتمالاً در .NET عملکرد خوبی دارید.
در حین نوشتن منطق در سی شارپ ، توسعه دهندگان اغلب با IEnumerable<T> و ICollection<T> مواجه می شوند. آنها ممکن است کاملا شبیه به نظر برسند اما اهداف متفاوتی در توسعه نرم افزار دارند.
خوب است که مجموعه ای سبک وزن داشته باشید که ایمن تر باشد، زیرا دستکاری داده ها مجاز نیست. هر مجموعه ای که می خواهید از دستکاری داده ها جلوگیری کنید، توصیه می شود از IEnumerable<T> استفاده کنید
IEnumerable<int> numbers = new List<int> { 1, 2, 3 }; foreach (var number in numbers) { Console.WriteLine(number); // Outputs: 1 2 3 }
ICollection<T> IEnumerable را گسترش می دهد<T> تغییرات را با کمک روش های تغییر امکان می دهد. این رابط شامل روش هایی برای افزودن، حذف و بررسی تعداد در مجموعه است.
ICollection<int> data = new List<int> { 12,43,556}; numbers.Add(4); Console.WriteLine(data.Count); // Outputs: 4
زمانی که متدهای تغییر برای مجموعه مورد نیاز است به ICollection<T> و برای اقدامات خواندن ساده IEnumerable<T> توصیه می شود.
توصیه می شود زمانی که می خواهید کدهای جفت شده و قابل آزمایش آزاد بنویسید، از یک الگوی طراحی DI استفاده کنید. با DI، توسعه دهندگان می توانند وابستگی های بین کلاس ها را به راحتی مدیریت کنند.
NET Core دارای پشتیبانی داخلی برای DI است که اجرای آن را آسان می کند.
چگونه یک توسعه دهنده می تواند DI را در سی شارپ پیاده سازی کند
public void ConfigureServices(IServiceCollection services) { // Register a transient service services.AddTransient<IMyService, MyService>(); }
public class MyController : Controller { private readonly IMyService _myService; public MyController(IMyService myService) { _myService = myService; } public IActionResult Index() { var data = _myService.GetData(); return View(data); } }
زمانی که یک توسعه دهنده ایجاد سرویس ها را جدا می کند، یک کد قابل نگهداری و آزمایش تر است.
در سی شارپ، ref و out برای ارسال پارامترها با مرجع استفاده میشوند، اما ویژگیهای متمایزی دارند.
public void UpdateValue(ref int number) { number += 10; } int myNumber = 5; UpdateValue(ref myNumber); Console.WriteLine(myNumber); // Outputs: 15
public void GetValues(out int value1, out int value2) { value1 = 10; value2 = 20; } GetValues(out int a, out int b); Console.WriteLine(a); // Outputs: 10 Console.WriteLine(b); // Outputs: 20
ref معمولاً زمانی استفاده میشود که یک متد نیاز به تغییر یک متغیر موجود داشته باشد، در حالی که out زمانی استفاده میشود که یک متد نیاز به برگرداندن چندین مقدار یا مقداردهی اولیهای دارد که توسط تماسگیرنده ارائه نشده است.
در دات نت، برنامه نویسی ناهمزمان برای نوشتن برنامه های کارآمدی که عملکرد خوبی در زیر بار دارند ضروری است. کلمات کلیدی async و await کار با عملیات ناهمزمان را ساده می کند.
public async Task<string> FetchDataAsync() { await Task.Delay(1000); // Simulates an asynchronous operation return "Data fetched"; }
public async Task ShowDataAsync() { string data = await FetchDataAsync(); Console.WriteLine(data); }
اگر می خواهید عملکرد برنامه خود را بهبود ببخشید، از async استفاده کنید و به طور موثر و در عین حال پاسخگو نگه داشتن رابط کاربری برنامه منتظر بمانید.
رسیدگی به استثناها برای حفظ برنامه های کاربردی قوی و کاربر پسند بسیار مهم است. NET Core مکانیسم های مختلفی را برای مدیریت استثنا ارائه می دهد.
try { int result = 10 / 0; // This will throw a DivideByZeroException } catch (DivideByZeroException ex) { Console.WriteLine("An error occurred: " + ex.Message); }
public void Configure(IApplicationBuilder app) { app.UseExceptionHandler("/Home/Error"); }
میانافزار جهانی رسیدگی به استثناها مکانی مشترک برای رسیدگی به تمام خطاها و استثناهای برنامه فراهم میکند. این تضمین می کند که برنامه به طور مداوم پاسخ ها را مدیریت می کند.
فایل appsettings.json برای مدیریت اعتبار برنامهها، مانند رشتههای پیکربندی و سایر کلیدهای خاص برنامه استفاده میشود. تنظیمات پیکربندی را می توان بر اساس هر محیط نیز تقسیم کرد
{ "ConnectionStrings": { "DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" }, "Logging": { "LogLevel": { "Default": "Warning" } } }
public class MyService { private readonly string _connectionString; public MyService(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection"); } }
فایل appsettings.json اجازه می دهد تا تنظیمات پیکربندی را به راحتی واکشی کند، نیازهایی که باید به طور موثر مدیریت شوند.
هر دو Task و Thread برای برنامه نویسی همزمان در سی شارپ استفاده می شوند، اما اهداف متفاوتی دارند.
Thread thread = new Thread(() => { Console.WriteLine("Running on a new thread"); }); thread.Start();
Task.Run(() => { Console.WriteLine("Running asynchronously"); });
وظایف مدیریت عملیات ناهمزمان را ساده می کند و اغلب انتخاب ارجح برای توسعه C# مدرن است.
به مجموعه کامل مصاحبه C#.Net دسترسی پیدا کنید
اگر مفهوم را با اطمینان می دانید و نمونه های کد را درک می کنید، احتمالاً به دات نت مسلط هستید.
بیایید گفتگو را ادامه دهیم و به عنوان متخصصان دات نت به رشد یکدیگر کمک کنیم.
کد نویسی مبارک!