我从C#开始,我有一个问题.
说我有一个对象:
Person
Run Code Online (Sandbox Code Playgroud)
以及名为Cat的人物:
Person.Cat
Run Code Online (Sandbox Code Playgroud)
如果我做:
Cat cat = new Cat(stuff);
cat.Name = "Alan";
Person.Cat = cat;
Run Code Online (Sandbox Code Playgroud)
猫是猫直接参考吗?如果我做:
Person.Cat.Name = "John";
Run Code Online (Sandbox Code Playgroud)
猫的名字会是"约翰"吗?
因为我觉得我之前尝试过这样的事情,并且我得到了NullReferenceException或类似的东西.
如果'cat'是一个类,即一个引用类型,那么该引用的副本将存储在person.Cat中.这意味着对'cat'属性的更改将反映在person.Cat中.但是,由于它是原始引用的副本,因此行为如下:
Cat cat = new Cat(stuff);
cat.Name = "Alan";
Person.Cat = cat;
cat.Name = "Will"; //Person.Cat.Name is now "Will"
cat = new Cat(stuff);
cat.Name = "Greg";
// Person.Cat is still named "Will".
// The original reference now points to a different object on the heap than does Person.Cat.
Run Code Online (Sandbox Code Playgroud)
如果Cat是一个值类型,那么副本是在赋值时生成的,一个中的更改不会反映在另一个中(当然,一个struct可以有一个引用类型属性或公共字段,但你明白了).
| 归档时间: |
|
| 查看次数: |
2662 次 |
| 最近记录: |