VS2013开发时,如果遇到类似以下的代码,会导致IDE意外奔溃。
internal class Program
{
private static void Main(string[] args)
{
}
}
internal abstract class baseClass
{
protected abstract int add(int a, int b = 0, params int[] additionParam);
}
partial class delivedClass : baseClass
{
protected override int add(int a, int b, params int[] additionParam)
{
int s = a + b;
foreach (var x in additionParam)
s += x;
return s;
}
int add2(int x)
{
return this.add(a);
}
}
上述代码中,关键问题在于:
1.虚函数要求一个参数数组,并且参数数组前的参数仍有默认值。
2.派生此类,实现此虚函数时,函数的默认值遗漏。
3.如果没有其他函数调用次函数,则一切OK。
4.如果在代码中调用了此函数,会在调用语句输入时,IDE意外奔溃。
5.如果以外部编辑器编辑此代码来调用此函数,则在变异此代码时,发生““Csc.exe”已退出,代码为 -1073740791。”的错误。
解决方式:
此错误比较隐蔽,编译时也没有针对性报错,因此很难查出问题所在。实践上需要保证基类的虚函数与派生类的实现函数的参数表完全一致,包括默认值。