当泛型类型匹配采用该类型的重载方法时,Visual Studio 2015不会编译

时间:2015-10-16 18:20:46

标签: c# visual-studio visual-studio-2015

我的项目在VS 2013中编译,但在VS 2015中无法编译。下面的代码重现了编译问题。 Validator类实际上是在第三方程序集中,因此我无法更改实现。 require类是本地类,但我不想更改实现,因为我将不得不更改许多验证逻辑。下面是在VS 2015中无法编译的代码。

public abstract class Validator<T> : Validator
{
    public override void DoValidate(object objectToValidate)
    {

    }
    protected abstract void DoValidate(T objectToValidate);
}

public abstract class Validator
{
    public abstract void DoValidate(object objectToValidate);
}

public abstract class ValidatorBase<T> : Validator<T>
{
    protected override void DoValidate(T objectToValidate)
    {

    }
}

public class Required : ValidatorBase<object>
{

}

此编译问题是否有解决方法?任何帮助将不胜感激。

错误:

Severity  Code    Description                                                                                     Project  File        Line

Error     CS0534  'Required' does not implement inherited abstract member 'Validator<object>.DoValidate(object)'           Program.cs  38

1 个答案:

答案 0 :(得分:2)

我试图找到这种行为的原因,我失败了。

我确实找到了解决方法。当ValidatorBase<T>不是抽象的时,您发布的代码会编译。我知道你无法改变它,但你可以在继承链中添加另一个非抽象类:

public class Workaround<T> : ValidatorBase<T> { }

public class Required : Workaround<object>
{

}

在定义非抽象派生类之前,Roslyn似乎无法解析抽象类中的重写方法。