1.5. .NET 框架核心
1.5.1. .NET 基类库(BCL)
BCL 提供所有 .NET 应用共享的核心功能。
1.5.1.1. System 命名空间
// 数学运算
Math.Max(10, 20); // 20
Math.Min(10, 20); // 10
Math.Abs(-5); // 5
Math.Pow(2, 10); // 1024
Math.Round(3.14159, 2); // 3.14
Math.Clamp(value, 0, 100); // 限制在 [0, 100]
// 随机数
var rng = Random.Shared;
int dice = rng.Next(1, 7); // 1~6
double pct = rng.NextDouble(); // 0.0~1.0
// 日期时间
DateTime now = DateTime.Now;
DateTime utc = DateTime.UtcNow;
DateTime today = DateTime.Today;
TimeSpan span = end - start;
// 时间运算
DateTime future = now.AddDays(7);
TimeSpan diff = future - now;
Console.WriteLine(diff.TotalHours); // 168
// GUID
Guid id = Guid.NewGuid();
Console.WriteLine(id.ToString()); // 全局唯一 ID
1.5.2. 文件 I/O
// 读写文本
string content = File.ReadAllText("data.txt");
string[] lines = File.ReadAllLines("data.txt");
File.WriteAllText("output.txt", "Hello");
// 异步版本
string text = await File.ReadAllTextAsync("data.txt");
await File.WriteAllTextAsync("output.txt", "Hello");
// 流式处理
using var reader = new StreamReader("large.txt");
string? line;
while ((line = await reader.ReadLineAsync()) != null)
ProcessLine(line);
// 文件/目录信息
var info = new FileInfo("data.txt");
Console.WriteLine(info.Length); // 大小
Console.WriteLine(info.CreationTime);
var dir = new DirectoryInfo(@"C:\Data");
foreach (var file in dir.GetFiles("*.txt"))
Console.WriteLine(file.Name);
1.5.3. 序列化
// System.Text.Json(.NET Core 3+ 内置)
var user = new User { Id = 1, Name = "Alice" };
// 序列化
string json = JsonSerializer.Serialize(user);
File.WriteAllText("user.json", json);
// 反序列化
string jsonText = File.ReadAllText("user.json");
var deserialized = JsonSerializer.Deserialize<User>(jsonText);
// 配置
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true,
PropertyNameCaseInsensitive = true,
};
// XML 序列化(旧版兼容)
var serializer = new XmlSerializer(typeof(User));
using var writer = new StreamWriter("user.xml");
serializer.Serialize(writer, user);
1.5.4. 进程与线程
// Task(推荐的方式)
Task task = Task.Run(() => DoWork());
await task;
Task<int> task2 = Task.Run(() => Compute());
int result = await task2;
// Parallel 循环
Parallel.For(0, 100, i =>
{
Console.WriteLine($"并行处理 {i}");
});
// PLINQ
var result = data.AsParallel()
.Where(x => x > 5)
.Select(x => ExpensiveOperation(x))
.ToList();
// lock 同步
private readonly object _lock = new();
lock (_lock)
{
sharedCounter++;
}
// 信号量
using var semaphore = new SemaphoreSlim(3); // 最多 3 并发
await semaphore.WaitAsync();
try { await DoWork(); }
finally { semaphore.Release(); }
1.5.5. 配置管理
// appsettings.json
// {
// "ConnectionStrings": {
// "Default": "Server=.;Database=MyDb;..."
// },
// "Logging": { "Level": "Information" }
// }
// 读取配置
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
string connStr = config.GetConnectionString("Default");
string logLevel = config["Logging:Level"];
// 强类型配置绑定
public class DatabaseOptions
{
public string ConnectionString { get; set; } = "";
public int TimeoutSeconds { get; set; } = 30;
}
var dbOptions = config
.GetSection("Database")
.Get<DatabaseOptions>();
1.5.6. 日志系统
// ILogger 接口(Microsoft.Extensions.Logging)
public class OrderService
{
private readonly ILogger<OrderService> _logger;
public OrderService(ILogger<OrderService> logger)
{
_logger = logger;
}
public async Task CreateOrderAsync(Order order)
{
_logger.LogInformation("创建订单:{OrderId}", order.Id);
try
{
// 业务逻辑...
}
catch (Exception ex)
{
_logger.LogError(ex, "订单创建失败:{OrderId}", order.Id);
throw;
}
}
}
// 日志级别:Trace < Debug < Information < Warning < Error < Critical