继承其泛型类型的泛型类

本文关键字:泛型类 泛型类型 继承 | 更新日期: 2023-09-27 17:55:04

可能的重复:
为什么C#泛型不能像在C++模板中那样从泛型类型参数中派生
在C#4.0中,是否可以从泛型类型参数派生类?

我正试图创建一个从其泛型类型继承的泛型类(在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> ();
}

继承其泛型类型的泛型类

我看不出您在尝试#1中提供的代码有什么意义。为什么要继承一个类,然后将该类作为泛型参数传递。

尽管如此,泛型继承是受支持的,但它的做法不同,请查看此链接,它可能会给你一个想法:泛型继承

希望这能有所帮助。

您所做的会违背一般目标。

我怎么能使用这样的东西:

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

问题是泛型定义了一种类型不特定的行为。泛型是特定于类型的,因为它必须从中继承。泛型用于封装在混合两者时无法在继承中表达的功能,我可以告诉你,不会是一个好的组合

不能这样做,因为泛型定义中的t是类型定义,而不是真正的类。不过,我不确定你想实现什么,因为在我看来,你的问题可以通过简单的继承来解决。如果你试图在类中添加一些行为,那么你可以简单地使用泛型并从中派生:

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