继承其泛型类型的泛型类

时间:2011-05-05 09:22:42

标签: c# generics

  

可能重复:
  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> ();
}

3 个答案:

答案 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>
{
  ...
}