泛型方法签名和标准签名相同

Dee*_*ena 8 c# generics overloading

假设您有一个使用T的方法的类.您还有相同名称的标准方法.

如果T与标准方法的类型相同,会发生什么?调用标准方法.

有什么方法可以强迫他打电话给T法吗?

使用系统;

namespace ConsoleApplication3
{
class Program
{
    static void Main()
    {
        Generics<Int32> anInt = new Generics<Int32>(4);
        Generics<String> aString = new Generics<String>("test");
    }
}

public class Generics<T>
{
    public T Member;

    public String ErrorMessage;

    public Generics(T member)
    {
        this.Member = member;
    }

    public Generics(String errorMessage)
    {
        this.ErrorMessage = errorMessage;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ter 5

对不起,没有.

最简单的解决方案是使用两个不同的方法名称来指示行为的差异.由于所讨论的方法名称是构造函数,因此您无法控制名称,因此必须将其中至少一个更改为普通方法.例如:

public class Generics<T>
{
    public T Member;

    public String ErrorMessage;

    public Generics(T member)
    {
        this.Member = member;
    }

    private Generics()
    {
        // empty constructor just to allow the class to create itself internally
    }

    public static Generics<T> FromError(String errorMessage)
    {
        return new Generics<T> { ErrorMessage = errorMessage };
    }
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我会将两个构造函数都更改为静态方法,以便使用户完全清楚行为的差异.但是,如果只更改一个构造函数,请将其设为错误一个.