泛型new()约束

在C#中,如果你有一个泛型类或方法,且其中需要创建类型T的实例,但是T并没有指定具有无参构造函数(new()约束),那么编译器不会允许你直接使用new T()来创建实例。

例如,假设你有以下泛型类:

Csharp
1public class MyClass<T>
2{
3    public T CreateInstance()
4    {
5        // 下面这行代码会报错,因为T没有new()约束
6        return new T();
7    }
8}

要解决这个问题,你可以:

  1. 在泛型类型参数上添加new()约束,以确保T总是具有公共无参构造函数:
Csharp
1public class MyClass<T> where T : new()
2{
3    public T CreateInstance()
4    {
5        return new T();
6    }
7}
  1. 如果不能添加new()约束,你可能需要找到其他方式来实例化类型T,比如通过工厂方法、反射或者其他依赖于具体类型的创建方式。但这种方法通常较为复杂且可能降低性能,应当尽量避免,除非确实无法预先知道类型T的具体信息。
posted @ 2024-04-17 16:33  celestially98  阅读(40)  评论(0编辑  收藏  举报