Проблема с пониманием ссылочных типов - PullRequest
1 голос
/ 23 сентября 2011

Я получаю от службы WCF ObservableCoolection

MyTypes = e.Result;

ObservableCollection<MyType> MyTypes // it's a property of _myTypes

<telerik:RadGridView x:Name="grdSrL" ItemsSource="{Binding MyTypes}"  SelectedItem="{Binding SelectedMyType, Mode=TwoWay}"

public ShowroomLog SelectedMyType
{
    get { return _selectedMyType; }
    set
    {
        if (_selectedSMyType != value)
        {
            _selectedMyType = value;
            RaisePropertyChanged(SelectedMyTypePropertyName);
        }
    }
}

после того, как я получу эту коллекцию от веб-службы, выбранный элемент устанавливается сеткой, и после этого я делаю:

SelectedMyType = null;

Почемупосле этого ни один из элементов коллекции не будет нулевым?

, если я сделаю:

var x = new Car();
var y = x;

и

y = null;

, тогда x также будет нулевым;

Почему тут разные?

1 Ответ

2 голосов
/ 23 сентября 2011

Ссылочные типы в C # являются фактически указателями на объекты. В вашем примере x и y являются указателями объектов, а не самими объектами. Если вы измените указатель, вы не измените объект. x не также станет нулевым , как вы заявите. Это предположение / пример неверен.

Если вы вызвали .Clear() для коллекции с помощью любой переменной, то оба указателя на эту коллекцию будут показывать 0 записей, , но вам нужно объяснить, что именно вы пытаетесь сделать, поэтому я могу объяснить с конкретным пример.

.Clear() не уничтожит ни одного потомка в списке, если на него есть ссылки в другом месте (например, в другом списке).

...