2012-09-02 117 views
1

我想为“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; 
} 

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

对不起我的英文不好。

+0

究竟什么是你的目标,你有什么问题? –

+2

Hayt和Huyt是谁? :-) – Vitaliy

+1

@Vitaliy Foo和Baz的土耳其语 – McGarnagle

回答

2

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

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

+0

这些如何在.net 3.5上工作?我已经尝试过.net 3.5项目,它的工作原理:/ –

+0

嗯我认识.net功能和c#功能现在是不同的东西。我对吗? –

+0

事实上,语言规范有独立的版本控制,尽管我非常肯定,要求使用框架v4来实际使用泛型/协变类型 – sehe