小编Chr*_*ish的帖子

从通用抽象类派生的类的C#方法重载问题

我正在研究一个项目,我有一个通用的抽象类型,它接受一个本身派生自抽象类型的类型参数.如果你想知道为什么我会这样做,请看这个问题.

我在抽象类中定义的派生类中重载方法遇到了一个有趣的问题.这是一个代码示例:

public abstract class AbstractConverter<T, U>
    where U : AbstractConvertible
    where T : AbstractConverter<T, U>
{
    public abstract T Convert(U convertible);
}

public class DerivedConvertibleConverter : AbstractConverter<DerivedConvertibleConverter, DerivedConvertible>
{
    public DerivedConvertibleConverter(DerivedConvertible convertible)
    {
        Convert(convertible);
    }

    public override DerivedConvertibleConverter Convert(DerivedConvertible convertible)
    {
        //This will not be called
        System.Console.WriteLine("Called the most derived method");
        return this;
    }

    public DerivedConvertibleConverter Convert(Convertible convertible)
    {
        System.Console.WriteLine("Called the least derived method");
        return this;
    }
}

public abstract class AbstractConvertible {}

public class Convertible : …
Run Code Online (Sandbox Code Playgroud)

c# generics overloading

6
推荐指数
1
解决办法
1188
查看次数

标签 统计

c# ×1

generics ×1

overloading ×1