【发布时间】:2011-09-23 08:43:30
【问题描述】:
我从 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);
}
}
}
在我从 Web 服务获取这些集合后,选定的项目由网格设置,然后我这样做:
SelectedMyType = null;
为什么在那之后没有一个集合中的项目不为空?
如果我这样做:
var x = new Car();
var y = x;
和
y = null;
那么 x 也将为空;
为什么会有不同?
【问题讨论】:
-
"那么 x 也会为空" - 你确定吗?也许是一个快速的控制台应用程序来测试这个假设......
-
您是否尝试过使用
x、y和Car的示例?只要Car被声明为一个类,x 就不像你评论的那样为空,x 仍然是新车。如果您想更好地理解引用类型,我总是发现考虑分离变量包含的对象很有用。那是因为,他们是。您的变量x和y只是对您创建的 Car 对象的引用。当您说var y = x;时,您实际上是在创建对同一对象的新引用。当您说y = null;时,您是在说删除此对象的引用。希望有帮助吗? -
@user278618
Dispose仅适用于本身负责非托管(阅读:非.NET)事物的对象。对于独立的纯托管对象,是的,只需停止“查看它”(即确保没有对它的引用),GC 会处理它。 -
在您的情况下@user278618,它将取决于变量的 范围。例如,如果它们是方法中的局部变量,则当方法退出时,变量将移出范围,因此对汽车的引用将被破坏。稍后,GC 将查看您创建的所有对象,找到汽车对象,并注意到不再有任何指向汽车的引用,因此它会销毁汽车。
-
@user278618 - 我不知道这是否有帮助,当然谷歌文档分配的格式没有帮助,但我举了一个简单的例子来说明引用和值类型之间的区别here
标签: .net silverlight telerik reference-type