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

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

我的项目在 VS 2013 中编译但在 VS 2015 中不编译。下面的代码重现了编译问题。 Validator 类实际上在第 3 方程序集中,因此我无法更改实现。 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

最佳答案

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

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

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

public class Required : Workaround<object>
{

}

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

关于c# - 当泛型类型匹配采用该类型的重载方法时,Visual Studio 2015 不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33177145/

相关文章:

c# - 如何在 Windows Phone 8 中将文本写入文件?

c# - 从 Visual Studio 运行应用程序时性能下降

c# - 为什么对象(根)类不冲突多重继承

c++ - 选择特定版本的 Visual Studio 命令行工具包并针对特定版本的 C++ 运行时环境编译文件

asp.net - Oracle 连接的实体数据模型向导崩溃

c++ - 二进制 '>=' : 'std::chrono::system_clock::time_point'

c# - 如果网格不在屏幕上,WPF DataGrid ScrollIntoView 显然什么都不做

.net - 计算包含 Visual Studio 解决方案的代码行数

visual-studio - pubspec.yaml 第 17 行第 5 列错误 : A dependency may only have one source

visual-studio-2015 - Natvis 浮点格式