3

假设:

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 时,软件可能无法选择这两种方法之一吗?

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

4

2 回答 2

4

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

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

方法的签名特别不包括返回类型、可以为最右边的参数指定的 params 修饰符,也不包括可选的类型参数约束。

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

于 2012-10-30T16:48:48.743 回答
-1

而且您可能还有一种方法,例如

 public MyClass Method<T>() 
    {
        // Do something specific to a myclass
    }

所以编译器不会有明确的选择。

于 2012-10-30T16:56:52.890 回答