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

本文关键字:Visual Studio 2015 编译 方法 泛型类型 重载 类型 | 更新日期: 2023-09-27 18:18:07

我的项目在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>
{
}

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

错误:<>之前严重性代码描述项目文件行错误CS0534 'Required'没有实现继承的抽象成员'Validator.DoValidate(object)' Program.cs

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

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

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

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

看起来Roslyn在定义非抽象派生类之前不会解析抽象类中被覆盖的方法