【发布时间】:2019-04-18 14:55:08
【问题描述】:
我有 2 个课程,DataDiff 和 SimpleDataDiff。 SimpleDataDiff 继承 DataDiff。 DataDiff 有两个虚拟属性,SimpleDataDiff 覆盖它们。我正在使用 Visual Studio 2013。
它们看起来像这样:
class DataDiff
{
public virtual Data Left { get; private set; }
public virtual Data Right { get; private set; }
public DataDiff(Data left, Data right)
{
Left = left; // Debugger crash
Right = right;
}
}
class SimpleDataDiff : DataDiff
{
public override Data Left
{
get { return Left as SimpleData; }
}
public override Data Right
{
get { return Right as SimpleData; }
}
public SimpleDataDiff(SimpleData left, SimpleData right) :
base(left, right)
{
}
}
Data 和SimpleData 只保存一些变量,SimpleData 继承Data。
现在,如果我调试像 SimpleDataDiff diff = new SimpleDataDiff(left, right); 这样的行,其中 left 和 right 是 SimpleData 的实例,然后进入构造函数,直到在 Left 中分配 Left 属性,调试器就会崩溃。
程序“program.exe”已退出,代码为 -2147023895 (0x800703e9)。
当我尝试将Data 中的属性更改为public Data Left { get; private set; } 并将SimpleData 中的属性更改为public new SimpleData Left { get; } 时,它停止了崩溃。这就是为什么我认为它可能与 virtual 关键字有关。我在这里遗漏了什么明显的东西吗?
此外,如果我跳过构造函数调用,调试器不会崩溃,但如果我尝试在调试器的 Locals 选项卡中打开 DataDiff 对象,它会崩溃。有人可以向我解释为什么会这样吗?
public class Data
{
public string Shortname { get; set; }
public uint StartByte { get; set; }
public uint ByteLen { get; set; }
}
class SimpleData : Data
{
public bool IsHighLowByteOrder { get; set; }
public uint StartBit{ get; set; }
public uint BitLen { get; set; }
}
【问题讨论】:
-
请贴出
Data和SimpleData的类定义,以及你使用的VS版本。
标签: c# visual-studio debugging crash