使用自由绑定泛型类型作为类型参数

使用自由绑定泛型类型作为类型参数

问题描述:

您是否看到一种方法来指定我的结果类型必须是MonadType <参数类型>在此接口内?使用自由绑定泛型类型作为类型参数

interface IMonad<MonadType> // where MonadType : GenricType<> 
{ 
    MonadType<T1> unit<T1>(T1 t) 
    Func<MonadType<T1>, MonadType<T2>> map<T1, T2>(Func<T1, T2> f); 
} 

我得到的错误: 类型参数“MonadType”不能与类型参数

没有被使用,则不能使用.NET泛型做到这一点。你想要做的是指定MonadType类型参数本身必须有一个通用参数; .NET类型系统不能表示该约束。

下面是在C#中伪造泛型monads的一种方法:http://sandersn.com/blog//index.php/2010/04/23/faking-type-classes-in-c