通用子类型继承

时间:2012-09-02 19:06:03

标签: c#

我想为“hede”方法定义“Hayt”类约束。

有没有办法定义约束,如

Hayt<?> or Hayt<extends Huyt>

这是测试代码

class Program
    {
        static void Main(string[] args)
        {
            Hayt<Huyt> asd1 = new Hayt<Huyt>();
            Hayt<Huyt2> asd2 = new Hayt<Huyt2>();

            //there arent any problem here
            hede<Hayt<Huyt>>(asd1);

            //runtime error
            hede<Hayt<Huyt2>>(asd2);
        }

        static T hede<T>(T vede)
            where T : Hayt<Huyt>
        {
            return vede;
        }
    }

    public class Hayt<T>
        where T : Huyt

    {

    }

    public class Huyt
    {

    }

    public class Huyt2 : Huyt
    {

    }

和它可能是这样的

static void Main(string[] args)
{
    Hayt<Huyt> asd1 = new Hayt<Huyt>();
    Hayt<Huyt2> asd2 = new Hayt<Huyt2>();

    hede<Hayt<Huyt>, Huyt>(asd1);

    hede<Hayt<Huyt2>, Huyt2>(asd2);
}

static T hede<T, B>(T vede)
    where B : Huyt
    where T : Hayt<B>
{
    return vede;
}

但我认为可能有更好的解决方案

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:2)

这就是你要做的。没有更顺畅的方法。

但请注意,C#4.0会为混合添加协方差和反方差。参见例如