泛型方法的泛型约束踩到的坑

 

最近在实操泛型的时候遇到了一个坑。

首先我写了一个泛型接口

public interface IShow<T>
{
    string GetClassType();
}

接下来我写了一个泛型类B<T>实现了IShow<T>

public class B<T> : IShow<T>
{
    public string GetClassType()
    {
        return typeof(T).Name;
    }
}

写了一个泛型方法

public static void Show2<T>(T t) where T : IShow<T>
{
    Console.WriteLine("接口约束");
}

在调用Show2<T>(T t)方法时报错了

B<string> b = new B<string>();
Show2(b);

不明,明明我的B<T>实现了IShow<T>,为什么报错了,根据提示,我将B<T>改成了这样

public class B<T> : IShow<B<T>>
{
    public string GetClassType()
    {
        return typeof(T).Name;
    }
}

编译通过。

将编译后的dll用ILSpy反编译后发现Show2<T>(T t)方法实际是这样的,原来T外面还包了一层

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值