c# - 解析通用方法签名时是否考虑了约束?

标签 c# generics methods signature

假设这样:

public class GenericMethods
{
    public T Method<T>() where T : struct
    {
        // Do something specific to a struct
    }

    public T Method<T>() where T : class
    {
        // Do something specific to a class
    }
}

在编译时不知何故无效,因为这两个方法采用相同的参数。但是,由于约束是相互排斥的,这两种方法真的会发生冲突吗?会不会在解析T的时候,软件无法选择这两种方法中的一种?

如果泛型类型是结构体或类,那么如何创建两个具有相同名称和参数的泛型方法?

最佳答案

没有。不考虑约束。返回类型也不是。这不会编译,并且不是合法的 C#。

这记录在 C# 语言规范的 3.6 中:

The signature of a method specifically does not include the return type, the params modifier that may be specified for the right-most parameter, nor the optional type parameter constraints.

虽然这两种方法在“逻辑上”是不同的,并且不会冲突,因为约束应该清楚地表明调用的是哪一种,但 C# 语言不支持这一点。语言设计者决定,这就是他们为 C# 实现规则所选择的方式。

关于c# - 解析通用方法签名时是否考虑了约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13143834/

相关文章:

scala - 使用 scala Type 设置类型参数(通过 TypeTag?)

java - 在一个变量中引用方法的参数

java - 创建同一类的多个对象的更简单方法

c# - 打开/关闭 Windows Phone 设置

c# - C#中目录的读取权限

java - 匿名方法使用泛型值作为参数

c# - 如何将这些通用方法调用从 C# 转换为 Java

java - 覆盖 Java 中的 protected 方法

c# - 检查 Get-NetTCPConnection 对象是否存在

c# - 如何解决小数和 double 之间的数学错误?