.net 理解引用类型的问题
我从WCF服务中得到了可观的信息.net 理解引用类型的问题,.net,silverlight,telerik,reference-type,.net,Silverlight,Telerik,Reference Type,我从WCF服务中得到了可观的信息 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 Sho
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);
}
}
}
为什么在此之后,集合中的所有项都不为null
如果我这样做:
var x = new Car();
var y = x;
及
那么x也是空的
为什么会有不同?C#中的引用类型实际上是对象指针。在您的示例中,x
和y
是对象指针,而不是对象本身。如果更改指针,则不会更改对象。x不会在声明时变为空。这个假设/例子是不正确的
如果通过任一变量对集合调用.Clear()
,则指向该集合的两个指针都将显示0个条目,但您需要解释您试图执行的操作,以便我可以用一个特定的示例进行解释。
.Clear()
不会破坏列表中的任何子项,如果在其他地方(例如,被另一个列表引用)。“那么x也将为null”-您确定吗?也许是一个快速的控制台应用程序来验证这一假设……您是否用x
、y
和Car
尝试过自己的例子?只要Car
被声明为类,x就不会像您所评论的那样为null,x仍然是新车。如果您想更好地理解引用类型,我总是认为考虑变量包含的对象是分离的。那是因为,他们是。变量x
和y
只是对您创建的汽车对象的引用。当你说vary=x代码>您实际上正在创建对同一对象的新引用。当你说y=null代码>您的意思是删除对对象的引用。希望有帮助?@user278618Dispose
仅适用于本身负责非托管(读取:non-.NET)事务的对象。对于一个独立的纯托管对象,是的,只要停止“查看它”(即确保没有对它的引用),GC就会处理它。在您的情况下@user278618,它将取决于变量的范围。例如,如果它们是方法中的局部变量,则当方法退出时,变量将移出范围,因此对car的引用将被销毁。在稍后的阶段,GC将查看您创建的所有对象,找到汽车对象,并注意到不再有任何指向汽车的引用,因此它会破坏汽车。@user278618-我不知道这是否有帮助,当然google docs指定的格式没有帮助,但是我举了一个例子来说明引用类型和值类型之间的区别,我知道有一些指针,比如_selectedMyType。如果我很好地理解了ObservableCollection不是指针的集合,ObservableCollection就是指针的集合。(如果孩子是值类型,我想他们会自动装箱,但我不是100%确定)。要点是(并非有意双关语),如果更改指针/变量,则不会更改引用同一对象的所有其他指针/变量。
var x = new Car();
var y = x;
y = null;