可能重复:
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.Attempt中)。看起来这是不可能的。但在其他尝试中我必须施放物体。该问题的任何设计解决方案?
// #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 :(得分:1)
我没有看到您在尝试#1中提供的代码的重点。为什么要继承一个类,然后将该类传递给泛型参数。
尽管如此,支持通用继承,但其完成的方式有所不同,请查看此链接,它可能会给您一个想法:Generic Inheritance
希望这有帮助。
答案 1 :(得分:0)
你正在做什么击败通用目标。
我怎样才能使用这样的东西:
Generic<int> intgen = new Generic<int>(); // Impossible
问题是 generic定义了一种类型非特定的行为。您的泛型是特定于类型的,因为它必须从继承。 Generic用于封装在混合两者时无法用继承表达的功能 - 我可以告诉你不会是一个很好的混合。
答案 2 :(得分:0)
你不能这样做,因为泛型定义中的T是一个类型定义,而不是一个真正的类。我不确定你要完成什么,因为在我看来你的问题可以通过一个简单的继承来解决。如果您尝试向类中添加一些行为,那么您可以简单地使用泛型并从中派生:
public class Behavior<T>
{
...
}
public class DerivedBehavior<T> : Behavior<T>
{
...
}