gpt4 book ai didi

c# - 是否可以通用地实现这个接口(interface),以便它只能传递一个类型参数?

转载 作者:太空狗 更新时间:2023-10-29 23:17:18 25 4
gpt4 key购买 nike

我有一个名为 Identifiable<TId> 的接口(interface)包含给定类型的单个属性 Id。我想创建一个通用类,将其中一个作为类型参数。它应该是通用的,因为我想返回具体类型,从其中调用其他通用方法并使用类似 typeof(T) 的东西.

这很好用:

public class ClassName<T, TId> where T : Identifiable<TId>

问题是调用代码必须传入两种类型。例如。 new ClassName<Person, int>()

我想知道在 .net 3.5 中是否有某种方法可以编写此代码以便 TId 可以由 T 推断出来?允许调用者只做 new ClassName<Person>()

最佳答案

根据您问题的性质,我猜您的 ClassName 不依赖于 Identifiable 中任何需要 TId 的方法(否则您将需要该类型。)如果是这种情况,这种情况下的一种常见解决方案是使用不需要 TId 类型的所有方法创建一个非泛型基接口(interface)。那么你有:

interface Identifiable<TId> : Identifiable //Not a standard interface name, btw

你的约束变成:

public class ClassName<T> where T : Identifiable

假设您确实需要 TId 类型,但只是想简化构造语法,如果您的构造函数采用 Identifiable 的实例(例如您示例中的 Person),一个选项是将构造函数更改为工厂方法:

public static ClassName<T, TId> FromIdentifiable<T,TId>(T identifiable) where T: Identifiable<TId>

以上应该允许编译器推断类型并根据参数的类型为您提供更短的语法。

关于c# - 是否可以通用地实现这个接口(interface),以便它只能传递一个类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333107/

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