C#中泛型约束后的效果
时间: 2025-02-25 15:51:41 浏览: 29
### C# 泛型约束的使用效果
在 C# 中,泛型约束用于限制可以作为类型参数使用的类型种类。这不仅提高了代码的安全性和灵活性,还使得开发者能够访问更多类型的成员和功能。
#### 基本语法
当定义带有约束条件的泛型类或方法时,`where` 关键字用来指定这些约束:
```csharp
public class MyClass<T> where T : struct {
// 类体
}
```
此例子表明 `T` 只能是非空值类型[^2]。
#### 实际应用场景
考虑一个场景,在该场景下希望创建一个只接受实现了特定接口的对象的集合。此时可以通过如下方式实现:
```csharp
// 定义接口
public interface IMyInterface { }
// 创建具有泛型约束的列表
public class MyList<T> where T : IMyInterface {
private List<T> items = new();
public void Add(T item){
items.Add(item);
}
}
// 实现接口的具体类
public class MyClass : IMyInterface {}
// 使用带约束的泛型类
var myList = new MyList<MyClass>();
myList.Add(new MyClass());
```
上述代码展示了如何利用泛型约束确保只有实现了 `IMyInterface` 接口的类型才能被添加到 `MyList<T>` 集合中。
#### 多重约束示例
有时可能需要施加多个不同的约束给同一个类型参数。例如,如果想要限定某个泛型函数既能处理派生自某基类又能调用无参构造器的新对象,则应这样写:
```csharp
public static T CreateInstance<T>() where T : BaseClass, new() {
return new T();
}
```
这段代码表示 `CreateInstance<T>()` 方法返回的是由 `new()` 运算符创建的一个新实例,并且这个实例所属的类型必须继承于 `BaseClass` 并拥有公共无参构造函数[^3]。
阅读全文
相关推荐
















