У меня есть 2 класса, DataDiff
и SimpleDataDiff
.SimpleDataDiff
наследует DataDiff
.
DataDiff
имеет два виртуальных свойства, SimpleDataDiff
переопределяет их оба.
Они выглядят так:
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
в DataDiff
сбой отладчика.
Программа 'program.exe' завершила работу с кодом -2147023895 (0x800703e9).
Когда я попытался изменить свойство в Data
на public Data Left { get; private set; }
и в SimpleData
на public new SimpleData Left { get; }
, оно перестало падать.
Вот почему я подумал, что это может иметь какое-то отношение к виртуальному ключевому слову.
Я что-то упускаю здесь очевидное?
Кроме того, если я перехожу через вызов конструктора, отладчик не падает, но если я пытаюсь открыть объект DataDiff
на вкладке Locals отладчика, он вылетает.
Может кто-нибудь объяснить мне, почему это происходит?
Изменить:
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; }
}
Я использую Visual Studio 2013