interface<T> method<T2> where T2 : T

本文关键字:gt T2 lt where interface method | 更新日期: 2023-09-27 18:03:47

查看这段代码

public interface IExample<T>
{
    IExample<T> Exposes<TInclude>() 
        where T : TInclude;
}

我正在寻找编译时强制,T是可浇注到TInclude。可以进行运行时检查,但更希望是编译时检查。

上面抱怨T没有定义。

有什么建议吗?我想做的是c#泛型吗?

interface<T> method<T2> where T2 : T

改变你的问题:

可以创建where子句,强制TIncludeTT派生的任何类型的约束。我希望执行"相反方向"约束:TIncludeTT的任何"基本类型"。这可能吗?

。c#不支持这种约束。对不起。

有什么建议吗?

我认为Scala支持这种约束。Java也是如此,尽管Java的方式有点奇怪。但是我想你并不想改变语言。

你能更详细地描述你想用这个接口表达的概念吗?如果我们知道你想做什么,那么我们会更容易给你实用的建议。

您可以将类型约束移动到接口级别,如下所示:

public interface IExample<T, U>
    where T : U
{
    IExample<T, U> Exposes();
}

它可能在某一天实现:参见1.2广义约束