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#泛型吗?
改变你的问题:
可以创建
where
子句,强制TInclude
为T
或T
派生的任何类型的约束。我希望执行"相反方向"约束:TInclude
是T
或T
的任何"基本类型"。这可能吗?
。c#不支持这种约束。对不起。
我认为Scala支持这种约束。Java也是如此,尽管Java的方式有点奇怪。但是我想你并不想改变语言。有什么建议吗?
你能更详细地描述你想用这个接口表达的概念吗?如果我们知道你想做什么,那么我们会更容易给你实用的建议。
您可以将类型约束移动到接口级别,如下所示:
public interface IExample<T, U>
where T : U
{
IExample<T, U> Exposes();
}
它可能在某一天实现:参见1.2广义约束