如果不是,并且引用类型和值类型的集合是互斥的,为什么不编译:
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/