泛型类 C# 的方法中的特殊情况

Jos*_* D. 1 c# generics

是否可以使泛型类中的方法对于特定类型的行为完全不同?

class MyClass<T> {
    public void myMethod(T t) { // Do something }

    // something for myMethod(int t) { // DO something special }
}
Run Code Online (Sandbox Code Playgroud)

以这样的方式,允许我调用(new MyClass<String>()).myMethod(myString)它会做一些事情,也可以调用(new MyClass<int>()).myMethod(myInt)它会做一些特殊的事情。

Pau*_*els 5

我认为你最好使用重载,而不是泛型。

例如:

public void myMethod(int t)
{
}

public void myMethod(string t)
{
}
Run Code Online (Sandbox Code Playgroud)

可以在泛型中进行类型检查,但这不是最佳实践。

根据您的编辑和讨论,我相信这就是您想要的:

class Program
{
    static void Main(string[] args)
    {
        IntClass c1 = new IntClass();
        c1.MyMethod(12);

        BaseClass<string> c2 = new BaseClass<string>();
        c2.MyMethod("hello world");
    }
}

class BaseClass<T>
{
    public virtual void MyMethod(T t)
    {
        Console.WriteLine(string.Format("Param: {0}", t));
    }
}

class IntClass : BaseClass<int>
{
    public override void MyMethod(int myVar)
    {
        Console.WriteLine(string.Format("Param: int"));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您的“IntClass”通过引入另一个方法来隐藏从其基类获取的方法。这可能会令人困惑。考虑在基类中创建“虚拟”方法,并在特殊类中创建“重写”方法。 (2认同)