2011-05-05 151 views
4

可能重复:
Why cannot C# generics derive from one of the generic type parameters like they can in C++ templates?
In C# 4.0, is it possible to derive a class from a generic type parameter?泛型类继承其通用型

我试图创建一个从它的泛型类型继承的泛型类(1。尝试)。看起来不可能。但在其他尝试中,我必须抛出物体。任何解决这个问题的设计?

// #1 Attempt 
public interface IFoo { } 

public class Generic<T> : T { } 

public void play() 
{ 
    IFoo genfoo = new Generic<IFoo>(); 
} 

// #2 Attempt. Castable solution 
public interface IAnything { } 

public interface IFoo2 : IAnything { } 

public class Generic2<T> : IAnything { } 

public void play2() 
{ 
    IFoo2 genFoo = (IFoo2) new Generic2<IFoo2>(); 
} 
+0

我看不出这是可能的,有或没有铸造。你想做什么?根据你的情况,它可能是你正在寻找类似Castle.DynamicProxy的东西,或者是一个嘲讽的框架...... – MattDavey 2011-05-05 09:27:38

+0

有一个泛型类必须从泛型类型继承,这有什么意义?它**违背了通用目标。 – Aliostad 2011-05-05 09:28:24

+0

你是什么意思,*继承*或*实现*?你说“继承”,但给一个接口作为例子。 – 2011-05-05 09:32:18

回答

0

你在做什么失败通用的目标。

如何我只是用这样的:

Generic<int> intgen = new Generic<int>(); // Impossible 

问题是通用定义了一个行为,是类型特异性。您的泛型是类型特定的,因为它必须从继承。泛型用于封装一个不能用继承来表达的功能,而你正在混合这两个 - 我可以告诉你它不会是一个好的混合

+1

'List list = new List (); // ????' – 2015-04-19 17:02:08

+1

实际上,不,它是非特定类型的,直到你实例化它,所以真的应该允许从泛型继承,这是一个蹩脚的约束 – 2016-02-27 02:45:19

1

我没有看到您在尝试#1中提供的代码的重点。为什么要继承一个类,然后将其传递给通用参数。

尽管如此,通用继承支持,但其做不同,请检查此链接,它可能给你一个想法:Generic Inheritance

希望这有助于。

+0

该链接似乎被打破。 – 2017-11-28 08:54:06

0

你不能这样做,因为通用定义中的T是类型定义而不是真实类。不过,我不确定你想要完成什么,因为在我看来,你的问题可以通过简单的继承来解决。如果你正在尝试一些行为添加到您的类,那么你可以简单地使用通用的,并从中导出:

public class Behavior<T> 
{ 
    ... 
} 

public class DerivedBehavior<T> : Behavior<T> 
{ 
    ... 
}