c# – 可链接变量类型

哪些变量类型可以链接?我试图使用对象,但它没有做我想要的.

object a;
object b;
b = 5;
a = b;
b = 2;
label1.Text = Convert.ToString(a);

它写了5但我希望它是2.

解决方法

这是对引用及其工作原理以及变量的简单误解.

object a; // a is a storage location
          // it holds references to instances of object

object b; // b is a storage location
          //it holds references to instances of object

b = 5; // "Boxes" 5 into an instance of object
       // and assigns reference to that object to b

a = b; // assigns reference in storage location b to storage location a

b = 2; // "Boxes" 2 into an instance of object
       // and assign reference to that object to b

想想这样. a和b是纸张,用于保存住在其上的房屋的地址.当你说b = 5时,可以把它想象成写下纸张上的家5的地址b.当你说a = b时,可以把它想象为将写在b上的地址复制到a.当你说b = 2时,可以把它想象为擦除写在b上的地址并用地址替换为2.这个动作不会改变写在纸上的值a.这就是这里发生的事情.

现在,让我们看一个非常简单的方法来制作你想要做的工作.

class MyValue {
    public int Value { get; set; }
}

MyValue b = new MyValue { Value = 5 }; 
MyValue a = b;
b.Value = 2;

现在,如果你说

Console.WriteLine(a.Value);

会发生什么?让我们小心翼翼.再次,回到a和b的类比,作为写有地址的纸片.我们已经说过MyValue b = new MyValue {Value = 5}.想一想这就是在纸上写下来的地址到一个房子,前面有一个标志,上面写着5.将a = b视为将写入b的地址复制到a.然后,将b.Value = 2视为改变前门上方标志的值,在这种情况下,将5更改为2.现在,如果有人询问,家中门上方的值是多少写在纸上的地址a?那么,a上的地址与b上的地址相同.我们刚刚将前门上方标志的值从5改为2.因此,我们希望看到2.

试试吧,尝试一下,你会看到打印到控制台的值2.

一遍又一遍地思考这个问题,直到你感觉到它深藏在你的骨头里.在你掌握这个基本概念之前,你会发现编程的理由非常具有挑战性.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...