gpt4 book ai didi

c# - 具有泛型参数和抽象类的泛型

转载 作者:可可西里 更新时间:2023-11-01 07:45:44 24 4
gpt4 key购买 nike

我有两个通用基类。第二个泛型类对第一个类的参数有约束。

abstract class FirstClass<T> {...}

abstract class SecondClass<U> where U : FirstClass {...}

这不起作用,因为未定义 FirstClass。所以我需要这样做。

abstract class FirstClass<T> {...}

abstract class SecondClass<U, T> where U : FirstClass<T> {...}

哪个有效。然而,这使得实现这些抽象类变得很丑陋。

class SomeClass {...}

class MyFirstClass : FirstClass<SomeClass> {...}

class MySecondClass : SecondClass<MyFirstClass, SomeClass> {...}

这对我来说似乎是多余的,因为我指定了 SomeClass 两次。有没有一种方法可以让来自 FirstClass 的 T 自动成为 SecondClass 的 U 来声明它。我真正希望它看起来像这样。

class SomeClass {...}

class MyFirstClass : FirstClass<SomeClass> {...}

class MySecondClass : SecondClass<MyFirstClass> {...}

虽然我怀疑这种确切的情况是否可能,但是否有更清洁的方式来做我想做的事情?

编辑

有几个人建议制作一个 IFirstClass 接口(interface)。但我的定义更接近于此。

class FirstClass<T>
{
public T MyObj { get; set; }
}

class SecondClass<U, T> where U : FirstClass<T>
{
U MyFirstClass { get; set; }
}

使用接口(interface)我无法从 SecondClass 访问 MyFirstClass.MyObj。虽然我可以创建一个 object T MyObj { get;放; } 在 IFirstClass 上,然后使用 new 隐藏它,如果我这样做,silverlight 会在绑定(bind)中抛出一个适合。

最佳答案

根据我的经验,为通用类创建非通用接口(interface)是最简单的。当您需要在不知道泛型类型的情况下转换为基类时,它也解决了这个问题。

interface IFirstClass {...}

abstract class FirstClass<T> : IFirstClass {...}

abstract class SecondClass<T> where T : IFirstClass {...}

关于c# - 具有泛型参数和抽象类的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5555730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com