【问题标题】:Generic class that inherits its generic type [duplicate]继承其泛型类型的泛型类[重复]
【发布时间】:2011-08-19 05:12:39
【问题描述】:

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

【问题讨论】:

  • 我看不出这是可能的,不管有没有强制转换。你想做什么?根据您的情况,您可能正在寻找诸如 Castle.DynamicProxy 之类的东西,或者可能是一个模拟框架...
  • 拥有一个必须从泛型类型继承的泛型类有什么意义?它打败了通用目标。
  • 你是什么意思,继承还是实现?你说“继承”,但举一个接口作为例子。
  • 另外,这里有很多很好的信息:stackoverflow.com/questions/1849107/…
  • 另外,昨天也有人问过这个问题:stackoverflow.com/questions/5890516/…

标签: c# generics


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

  • 链接似乎已损坏。
【解决方案2】:

你所做的事情违背了一般目标。

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

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

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

【讨论】:

  • List&lt;int&gt; list = new List&lt;int&gt;(); //????
  • 实际上,不,它是类型不特定的,直到你实例化它,所以应该允许真正从泛型类型继承,这是一个蹩脚的约束
【解决方案3】:

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

public class Behavior<T>
{
  ...
}

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

【讨论】:

    猜你喜欢
    • 2011-08-17
    • 2018-09-27
    • 2015-09-15
    • 2018-08-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多