gpt4 book ai didi

c# - 声明具有复杂类型约束的继承泛型

转载 作者:行者123 更新时间:2023-11-30 22:50:27 26 4
gpt4 key购买 nike

我有一个带有单个泛型类型参数的接口(interface):

public interface IDriveable<T> where T : ITransmission { ... }

我还有一个类,该类的类型参数需要是该接口(interface)类型:

public class VehicleFactory<T> where T : /* ??? */

这里声明有问题。我不能放置“IDriveable”,因为它没有类型参数并且与 IDriveable 的类型签名不匹配。但我也不想放置 IDriveable,因为 VehicleFactory 必须知道它得到的是什么种类的 IDriveable。我希望 VehicleFactory 接受任何类型的 IDriveable。

一位同事提出的解决方案是使用:

public class VehicleFactory<T, U> where T : IDriveable<U>

但我不喜欢这样,因为它是多余的。我必须说两次“U”类型:

var factory = new VehicleFactory<IDriveable<AllWheelDrive>, AllWheelDrive>();

问号里应该写什么?

最佳答案

VehicleFactory 将如何使用 T?它是否真的需要约束才能工作,还是只是为了开发人员完整性检查?

解决这个问题的一种常见方法是声明一个非通用接口(interface) (IDriveable),然后让您的通用接口(interface)扩展它:

public interface IDriveable {}
public interface IDriveable<T> : IDriveable {}
public class VehicleFactory<T> where T : IDriveable

如果您确实希望工厂能够使用T 做事,您可以放置​​来自 IDriveable<T> 的任何接口(interface)成员哪个不关心T进入非泛型 IDriveable .

关于c# - 声明具有复杂类型约束的继承泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576660/

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