Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# 泛型约束

作者:霸气邪剑仙   发布日期:2026-03-27   浏览:102

// 定义一个泛型类,并添加约束,要求类型必须是类且实现IDisposable接口
public class GenericClass<T> where T : class, IDisposable
{
    private T _item;

    public GenericClass(T item)
    {
        _item = item;
    }

    public void DisposeItem()
    {
        if (_item != null)
        {
            _item.Dispose();
        }
    }
}

// 定义一个泛型方法,并添加约束,要求类型必须有无参构造函数
public class Helper
{
    public T CreateInstance<T>() where T : new()
    {
        return new T();
    }
}

// 使用泛型约束的示例
public class Program
{
    public static void Main()
    {
        // 创建GenericClass实例,传递一个实现了IDisposable接口的对象
        using (var gc = new GenericClass<System.IO.StreamReader>(new System.IO.StreamReader("file.txt")))
        {
            // 调用DisposeItem方法来释放资源
            gc.DisposeItem();
        }

        // 创建Helper类的实例并调用CreateInstance方法创建一个新的对象
        var helper = new Helper();
        var instance = helper.CreateInstance<System.Text.StringBuilder>();
        Console.WriteLine(instance.Capacity);
    }
}

解释说明:

  1. 泛型类约束GenericClass<T> 类中使用了 where T : class, IDisposable 约束,这意味着泛型参数 T 必须是一个引用类型(即类),并且必须实现 IDisposable 接口。这样可以确保 _item 可以调用 Dispose 方法。
  2. 泛型方法约束Helper 类中的 CreateInstance<T> 方法使用了 where T : new() 约束,这意味着泛型参数 T 必须有一个无参构造函数。这样可以确保在运行时可以通过 new T() 创建一个新的实例。
  3. 使用示例:在 Main 方法中,我们展示了如何使用这些泛型类和方法。通过传递一个实现了 IDisposable 接口的对象给 GenericClass,并在需要时调用 DisposeItem 方法来释放资源。同时,我们也展示了如何使用 Helper 类创建一个新的 StringBuilder 实例。

上一篇:c# xml转json

下一篇:c# 跳出for循环

大家都在看

c# 二进制

c# 创建目录

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站