C# 中的高阶用法涵盖了多种高级特性和编程技巧,能够提升代码的灵活性、可维护性和性能。以下是一些常见的高阶用法:
1. LINQ(Language Integrated Query)
-
用于查询集合、数据库等数据源,支持链式操作。
-
示例:
csharp
var result = from p in people where p.Age > 18 orderby p.Name select p;
2. 异步编程(Async/Await)
-
用于处理异步操作,避免阻塞主线程。
-
示例:
csharp
public async Task<string> FetchDataAsync() { var data = await httpClient.GetStringAsync("https://example.com"); return data; }
3. 泛型(Generics)
-
提供类型安全的代码复用,适用于集合、方法、类等。
-
示例:
csharp
public class Box<T> { public T Content { get; set; } }
4. 反射(Reflection)
-
用于在运行时获取类型信息、调用方法等。
-
示例:
csharp
Type type = typeof(MyClass); MethodInfo method = type.GetMethod("MyMethod"); method.Invoke(instance, null);
5. 属性(Attributes)
-
用于添加元数据,影响编译器和运行时行为。
-
示例:
csharp
[Serializable] public class MyClass { }
6. 委托和事件(Delegates and Events)
-
用于实现事件驱动编程。
-
示例:
csharp
public delegate void MyEventHandler(object sender, EventArgs e); public event MyEventHandler MyEvent;
7. 表达式树(Expression Trees)
-
用于在运行时构建和编译代码。
-
示例:
csharp
Expression<Func<int, int>> square = x => x * x; Func<int, int> compiled = square.Compile(); int result = compiled(5); // 25
8. 动态类型(Dynamic Types)
-
用于在编译时跳过类型检查,适用于与动态语言交互。
-
示例:
csharp
dynamic obj = GetDynamicObject(); obj.MyMethod();
9. 模式匹配(Pattern Matching)
-
用于简化条件判断,支持类型匹配和属性匹配。
-
示例:
csharp
if (obj is int i && i > 10) { Console.WriteLine($"Number is greater than 10: {i}"); }
10. 记录类型(Records)
-
用于创建不可变数据类型,自动生成
Equals
、GetHashCode
等方法。 -
示例:
csharp
public record Person(string Name, int Age);
11. 扩展方法(Extension Methods)
-
用于为现有类型添加新方法。
-
示例:
csharp
public static class StringExtensions { public static bool IsNullOrEmpty(this string str) { return string.IsNullOrEmpty(str); } }
12. 并行编程(Parallel Programming)
-
用于利用多核处理器提升性能。
-
示例:
csharp
Parallel.For(0, 10, i => { Console.WriteLine($"Processing {i}"); });
13. 不安全代码(Unsafe Code)
-
用于直接操作内存,适用于高性能场景。
-
示例:
csharp
unsafe void ModifyValue(int* ptr) { *ptr = 10; }
14. 源生成器(Source Generators)
-
用于在编译时生成代码,减少手动编写重复代码。
-
示例:
csharp
[Generator] public class MySourceGenerator : ISourceGenerator { public void Execute(GeneratorExecutionContext context) { context.AddSource("GeneratedClass.cs", "public class GeneratedClass { }"); } }
15. 依赖注入(Dependency Injection)
-
用于管理对象依赖关系,提升代码可测试性和可维护性。
-
示例:
csharp
public class MyService { private readonly IMyDependency _dependency; public MyService(IMyDependency dependency) { _dependency = dependency; } }
这些高阶用法能够帮助开发者编写更高效、灵活和可维护的代码,适用于复杂的应用场景。