این مقاله برای هر کسی که می خواهد تخصص خود را در دات نت ثابت کند عالی است!
سلام به توسعه دهندگان دات نت،
اگر نمونههای کد را میدانید و درک میکنید، احتمالاً در .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> توصیه می شود.
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); } }
زمانی که یک توسعه دهنده ایجاد سرویس ها را جدا می کند، یک کد قابل نگهداری و آزمایش تر است.
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 زمانی استفاده میشود که یک متد نیاز به برگرداندن چندین مقدار یا مقداردهی اولیهای دارد که توسط تماسگیرنده ارائه نشده است.
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 استفاده کنید و به طور موثر و در عین حال پاسخگو نگه داشتن رابط کاربری برنامه منتظر بمانید.
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"); }
میانافزار جهانی رسیدگی به استثناها مکانی مشترک برای رسیدگی به تمام خطاها و استثناهای برنامه فراهم میکند. این تضمین می کند که برنامه به طور مداوم پاسخ ها را مدیریت می کند.
{ "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 اجازه می دهد تا تنظیمات پیکربندی را به راحتی واکشی کند، نیازهایی که باید به طور موثر مدیریت شوند.
Thread thread = new Thread(() => { Console.WriteLine("Running on a new thread"); }); thread.Start();
Task.Run(() => { Console.WriteLine("Running asynchronously"); });
وظایف مدیریت عملیات ناهمزمان را ساده می کند و اغلب انتخاب ارجح برای توسعه C# مدرن است.