c# - 一个类型可以同时是引用类型和值类型吗?

标签 c# type-systems

如果不是,并且引用类型和值类型的集合是互斥的,为什么不编译:

public static void Do<T>(T obj) where T : struct { }
public static void Do<T>(T obj) where T : class { }

编译器指出:“Type 已经用相同的参数类型定义了一个名为‘Do’的成员。”,但此处的 T 和 T 并不相同。一个是对结构的约束,另一个是对类的约束。对函数的调用应该始终是可解析的。有反例吗?

最佳答案

通用约束未被视为重载匹配的一部分。它与返回类型相同。

例如,这将导致相同的错误(重载仅在返回类型上不同):

public static int Do<T>(T obj) { }
public static bool Do<T>(T obj) { }

在这两种情况下,匹配重载的规则只考虑参数类型,忽略约束和返回类型等附加信息。

关于c# - 一个类型可以同时是引用类型和值类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003167/

相关文章:

c# - Docebo - 构建授权 header

c# - ObservableCollection 未绑定(bind)到组合框

java - 如何在 Scala 中为存在类型显式指定参数化类型?

generics - F# 类型函数和 [<GeneralizableValue>] 属性

c# - Ef Core 3 实体类型 XOrder 不能映射到表,因为它派生自 Order Only 基本实体类型可以映射到表

c# - 使用 DateTime 结构解析 ISO8601 日期/时间

c# - 我可以使用 C# WinForm 模拟此选项对话框窗口吗?

haskell - 创建一个折叠,允许在每次重复的函数调用后更改类型,以便在不递归的情况下调用函数 n 次

f# - F# 中的显式类型递归

Scala:排序逆变