use*_*274 11 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>
{
}
Run Code Online (Sandbox Code Playgroud)
这个编译问题有解决方法吗?任何帮助,将不胜感激.
错误:
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>
{
}
Run Code Online (Sandbox Code Playgroud)
看起来 Roslyn 在定义非抽象派生类之前不会解析抽象类中重写的方法。
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |