C# 泛型实例化的5种姿势,你会几种?别只会 new List<string>()
|
admin
2025年6月22日 10:25
本文热度 3052
|
前言
在 C# 的世界里,泛型就像瑞士军刀一样实用。
无论是集合类 List<T>、字典 Dictionary<TKey, TValue>,还是我们自己写的通用类,泛型都让我们的代码既灵活又安全。
但你有没有想过,当我们写下这样一行代码时:
var list = new List<string>();
背后其实有不止一种“生”它的方法。
换句话说,泛型不是只能靠 new 来创建,还有其他一些有趣的、甚至你可能没见过的方式。
今天我们一起来看看C# 中泛型对象的5种实例化方式,看看你已经掌握了几种,又有几种是今天才第一次见到的!
1. 直接实例化
这是最基本的泛型实例化方式。
类型明确,编译器知道你要的是什么。
所有你能确定类型的时候都可以用这种方式,简单高效。
List<string> stringList = new List<string>();
Dictionary<int, string> dict = new Dictionary<int, string>();
2. 使用 var 关键字
使用 var 可以简化重复书写类型名的麻烦。
实际上仍然是静态类型,只是省去了显式声明。
适用于类型清晰、一眼就能看出的情况下。
一定程度上可以提高代码可读性。
var stringList = new List<string>();
var dict = new Dictionary<int, string>();
3. 使用 default 关键字
虽然 default(T) 并不会调用构造函数,不是真正的“实例化”,但我们可以利用它来创建类型的默认值:
int defaultInt = default(int); // 0
MyClass defaultObj = default(MyClass); // null
4. 通过反射实例化
这种方式常用于运行时动态加载类型。
适用于插件系统、序列化/反序列化等需要延迟绑定的场景。
不过实现上相对比较复杂,但也更加灵活。
Type genericListType = typeof(List<>);
Type concreteListType = genericListType.MakeGenericType(typeof(string));
object listInstance = Activator.CreateInstance(concreteListType);
5. 使用工厂模式
将泛型实例化封装成工厂类,提高复用性和解耦。
可结合缓存机制优化性能。
public static class Factory
{
public static T Create<T>() where T : new()
{
return new T();
}
}
// 使用
var instance = Factory.Create<MyClass>();
总结
今天我们聊了 C# 中泛型对象的 五种实例化方式。
希望它们能帮你打开思路,写出更优雅、更灵活的泛型代码。
该文章在 2025/6/23 9:40:17 编辑过