Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 理解引用类型的问题_.net_Silverlight_Telerik_Reference Type - Fatal编程技术网

.net 理解引用类型的问题

.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

我从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 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您的意思是删除对对象的引用。希望有帮助?@user278618
Dispose
仅适用于本身负责非托管(读取:non-.NET)事务的对象。对于一个独立的纯托管对象,是的,只要停止“查看它”(即确保没有对它的引用),GC就会处理它。在您的情况下@user278618,它将取决于变量的范围。例如,如果它们是方法中的局部变量,则当方法退出时,变量将移出范围,因此对car的引用将被销毁。在稍后的阶段,GC将查看您创建的所有对象,找到汽车对象,并注意到不再有任何指向汽车的引用,因此它会破坏汽车。@user278618-我不知道这是否有帮助,当然google docs指定的格式没有帮助,但是我举了一个例子来说明引用类型和值类型之间的区别,我知道有一些指针,比如_selectedMyType。如果我很好地理解了ObservableCollection不是指针的集合,ObservableCollection就是指针的集合。(如果孩子是值类型,我想他们会自动装箱,但我不是100%确定)。要点是(并非有意双关语),如果更改指针/变量,则不会更改引用同一对象的所有其他指针/变量。
var x = new Car();
var y = x;
y = null;