Я чешу голову здесь ... У меня есть большая программа, которую я написал на C #, и в ней есть небольшая ошибка, которая не имеет для меня никакого смысла.
Очень быстрый фон:
У меня есть класс с именем CompoundSet
, который содержит DataSet
(не System.Data.DataSet
, это мой собственный определенный класс), который определяется следующим образом:
public class CompoundSet
{
private DataSet dataSet;
public DataSet { get { return dataSet; } }
//...
}
compountSet
является локальным членом моего основного класса рабочего процесса, и я запускаю окно редактора данных, например:
DataWindow dw = new DataWindow(compoundSet.DataSet);
Конструктор для DataWindow
выглядит так:
public DataWindow(DataSet dataSet)
{
// ...
this.dataSet = dataSet;
}
и DataWindow перечисляет содержимое DataSet
в различных элементах управления GUI.
Это окно показывает, что в данный момент находится в наборе данных. Пользователь может изменять данные по своему усмотрению. Когда они закрывают dw
, изменения данных ДОЛЖНЫ быть в CompoundSet
, так как мы только передаем указатели. DataSet
в compoundSet
и DataSet
в dw
ДОЛЖНЫ быть одинаковыми, однако это не так.
Если я установлю точку останова в классе DataWindow
в событии закрытия, я вижу, что локальные dw.dataSet
и WorkFlow.compoundSet.DataSet
не имеют одинаковую информацию.
Учитывая, что я передал указатель на compoundSet.DataSet
классу DataWindow
в конструкторе и нигде не использовал ключевое слово new
в DataWindow
, это не имеет никакого смысла для меня?
Почему мой compoundSet.DataSet
отличается от моего dw.dataSet
?
Редактировать : Я попытался создать DataWindow
, например:
DataSet ds = compoundSet.DataSet;
DataWindow dw = new DataWindow(ds);
dw.ShowDialog(this); // breakpoint on dw.FormClosing shows the dataset has new data
return; // breakpoint here shows ds is different from dw.dataSet