本文深入探讨了每个开发人员都必须了解的不同 C# 概念。测试您的知识总是一个好主意,我在本文中汇总了一些示例,其中包含解释和代码示例。
如果您了解并理解代码示例,则您可能在 .NET 方面做得很好。
在 C# 中编写逻辑时,开发人员经常会遇到 和 。它们可能看起来非常相似,但它们在软件开发中的用途不同。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<int> data = new List<int> { 12,43,556};
numbers.Add(4);
Console.WriteLine(data.Count); // Outputs: 4
当集合和简单读取操作需要 alter methods 时,建议使用 TRANSFORM。ICollection<T>IEnumerable<T>
当你想编写松散耦合且可测试的代码时,建议使用DI设计模式。使用 DI,开发人员可以轻松管理类之间的依赖关系。
.NET Core 具有对 DI 的内置支持,使其易于实现。
开发人员如何在 C 中实现 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);
}
}
当开发人员将服务的创建解耦时,代码的可维护和可测试性更强。
在 C# 中,用于通过引用传递参数,但它们具有不同的特征。refout
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
在 .NET 中,异步编程对于编写在负载下性能良好的高效应用程序至关重要。和 关键字简化了异步操作的使用。asyncawait
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 和 await,同时保持应用程序 UI 的响应性。
妥善处理异常对于维护健壮且用户友好的应用程序至关重要。.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
两者都用于 C# 中的并发编程,但它们的用途不同。TaskThread
Thread thread = new Thread(() =>
{
Console.WriteLine("Running on a new thread");
});
thread.Start();
Task.Run(() =>
{
Console.WriteLine("Running asynchronously");
});
任务简化了异步操作的管理,通常是现代 C# 开发的首选。