// The Structure of the Container and the items
public interface IContainer <TItem> where TItem : IItem
{
}
public class AContainer : IContainer<ItemA>
{
}
public interface IItem
{
}
public class ItemA : IItem
{
}
// Client app
[Test]
public void Test ()
{
IContainer<IItem&g
虽然我已经看过这些例子,但我仍然对如何让它工作感到困惑。我需要支持泛型中的一些变化。
public interface I1 { }
public class BaseClass<U> : List<U>
where U : I1 {}
public class Class1 : I1 { }
public class DerivedClass : BaseClass<Class1>
{
}
public class TestMain
{
public void StartUsing()
{
/*Compile
日安,
我有一个类,用来存储类型T的值,直到运行时我才知道类型是什么。我想拆箱/转换,不确定正确的术语是什么,一个特定的类型(在本例中是一个可以为空的小数)返回到object类型。
请原谅我的代码布局:
类代码片段:
public abstract class Types
{
public class ValueField<T>
{
[XmlAttribute]
public int TemplateID { get; set; }
[XmlAttribute]
以下总结了我对C#中差异的理解。如果你能告诉我问题出在哪里,我会很感激,因为我读过埃里克·利珀特( Eric )在上发表的那篇文章,我无法理解其中的大部分内容。
方差是指一种类型的转换(或者像Eric Lippert所说的那样的投影)可以保持赋值兼容性(协方差),或者逆转它(反方差),或者既不能保持它,也不能逆转它(不变性)。也就是说,如果我是T中的协变量转换,其中T是一组类型,那么对于T中的任何T1和T2类型,如果T1可分配给T2,则I<T1>可分配给I<T2>。如果我是反差的话,结果就会恢复。如果我是不变的,那么I<T1>既不能分配给I<T2>
我们从范畴理论中得知,并不是集中的所有函子都承认一个自由单子。典型的反例是powerset函子。
但是Haskell可以把任何函子变成一个自由的单体。
data Free f a = Pure a | Free (f (Free f a))
instance Functor f => Monad (Free f) where
return = Pure
Pure a >>= f = f a
Free m >>= f = Free ((>>= f) <$> m)
是什么使这个构造对任何Haskell函子都有用,但在Set中却崩溃了