如何在C#中定义和使用约束

   2024-09-30 8970
核心提示:在C#中,约束是与泛型类型参数一起使用的条件,它们限制了可以用于该类型参数的类型基类约束:要求类型参数必须是指定类型的子类

在C#中,约束是与泛型类型参数一起使用的条件,它们限制了可以用于该类型参数的类型

基类约束:要求类型参数必须是指定类型的子类型或者是该类型本身。接口约束:要求类型参数必须实现指定的接口。构造函数约束:要求类型参数必须具有无参数的公共构造函数。引用类型约束:要求类型参数必须是引用类型(如类、接口或委托)。值类型约束:要求类型参数必须是值类型(如结构体或枚举)。默认构造函数约束:要求类型参数必须具有默认构造函数。等效约束:要求类型参数必须与另一个类型参数具有相同的基类型。不等式约束:要求类型参数不能为特定类型。

下面是一个示例,展示了如何在C#中定义和使用约束:

using System;// 定义一个泛型接口,其中 T 必须实现 IComparable<T> 接口public interface ISortAlgorithm<T> where T : IComparable<T>{    void Sort(T[] array);}// 定义一个泛型类,其中 T 必须是引用类型public class MyClass<T> where T : class{    private T _value;    public MyClass(T value)    {        _value = value;    }    public T GetValue()    {        return _value;    }}// 定义一个泛型类,其中 T 必须具有无参数的公共构造函数public class MyOtherClass<T> where T : new(){    private T _instance;    public MyOtherClass()    {        _instance = new T();    }    public T GetInstance()    {        return _instance;    }}// 定义一个泛型方法,其中 T 必须是值类型public static class Utility{    public static bool IsDefault<T>(T value) where T : struct    {        return EqualityComparer<T>.Default.Equals(value, default(T));    }}

在这个示例中,我们定义了一个泛型接口 ISortAlgorithm<T>,其中 T 必须实现 IComparable<T> 接口。我们还定义了一个泛型类 MyClass<T>,其中 T 必须是引用类型。此外,我们还定义了一个泛型类 MyOtherClass<T>,其中 T 必须具有无参数的公共构造函数,以及一个泛型方法 IsDefault<T>,其中 T 必须是值类型。

 
举报打赏
 
更多>同类网点查询
推荐图文
推荐网点查询
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号