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