泛型约束

泛型约束的概念

让泛型的类型有一定限制

值类型: where 泛型字母 : struct

引用类型: where 泛型字母 : class

存在无参公共构造函数: where 泛型字母 : new()

某个类本身或者其派生类: where 泛型字母 : 类名

某个接口的派生类型: where 泛型字母 : 接口名

另一个泛型类型本身或者其派生类型: where 泛型字母 : 另一个泛型字母


//值类型约束
class Test1<T> where T : struct
{
    public T value;
    public void TestFunc<K>(K k) where K : struct
    {

    }
}
//引用类型约束
class Test2<T> where T : class
{
    public T value;
    public void TestFunc<K>(K k) where K : class
    {

    }
}
//公共无参构造约束
//抽象函数不能使用
class Test3<T> where T : new()
{
    public T value;
    public void TestFunc<K>(K k) where K : new()
    {

    }
}
class TestClass
{

}
Test3<TestClass> t3 = new Test3<TestClass>();
//类约束
//必须是Test1或者Test1的子类
class Test4<T> where T : Test1
{
    public T value;
    public void TestFunc<K>(K k) where K : Test1
    {

    }
}
//接口约束
interface IFly
{

}
class Test5<T> where T : IFly
{
    public T value;
    public void TestFunc<K>(K k) where K : IFly
    {

    }
}
//另一个泛型约束
//T要不是U的本身类型,或者T是U的派生类型
class Test6<T,U> where T : U
{
    public T value;
    public void TestFunc<K,M>(K k) where K : M
    {

    }
}
//约束的组合使用
class Test6<T> where T : class,new()
{

}
//多个泛型有约束
class Test6<T,U> where T : class,new() where K:struct
{

}

复习
//索引器
public T this[int index]
{
    get
    {
        return array[index]
    }
    set
    {
        array[index] = value;
    }
}
posted @ 2025-01-11 06:32  cannedmint  阅读(42)  评论(0)    收藏  举报