C# 引用类型赋值 VS 值类型赋值

use*_*466 3 c#

我理解的理论概念是将一个引用类型变量分配给另一个引用类型变量,仅复制引用,而不复制对象。将一个值类型变量分配给另一个值类型变量,即复制该对象。但我无法发现代码中的不同之处。有人能指出以下两个代码块之间的区别吗?谢谢你!

参考类型分配

using System;

class Employee
{
    private string m_name;

    public string Name
    {
        get { return m_name; }
        set { m_name = value; }
    }
}

class Program
{
    static void Main()
    {
        Employee joe = new Employee();
        joe.Name = "Joe";

        Employee bob = new Employee();
        bob.Name = "Bob";

        Console.WriteLine("Original Employee Values:");
        Console.WriteLine("joe = " + joe.Name);
        Console.WriteLine("bob = " + bob.Name);

        // assign joe reference to bob variable
        bob = joe;

        Console.WriteLine();
        Console.WriteLine("Values After Reference Assignment:");
        Console.WriteLine("joe = " + joe.Name);
        Console.WriteLine("bob = " + bob.Name);

        joe.Name = "Bobbi Jo";

        Console.WriteLine();
        Console.WriteLine("Values After Changing One Instance:");
        Console.WriteLine("joe = " + joe.Name);
        Console.WriteLine("bob = " + bob.Name);

        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

值类型分配

using System;

struct Height
{
    private int m_inches;

    public int Inches
    {
        get { return m_inches; }
        set { m_inches = value; }
    }
}

class Program
{
    static void Main()
    {
        Height joe = new Height();
        joe.Inches = 71;

        Height bob = new Height();
        bob.Inches = 59;

        Console.WriteLine("Original Height
            Values:");
        Console.WriteLine("joe = " + joe.Inches);
        Console.WriteLine("bob = " + bob.Inches);

        // assign joe reference to bob variable
        bob = joe;

        Console.WriteLine();
        Console.WriteLine("Values After Value Assignment:");
        Console.WriteLine("joe = " + joe.Inches);
        Console.WriteLine("bob = " + bob.Inches);

        joe.Inches = 65;

        Console.WriteLine();
        Console.WriteLine("Values After Changing One Instance:");
        Console.WriteLine("joe = " + joe.Inches);
        Console.WriteLine("bob = " + bob.Inches);

        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

ang*_*son 5

嗯,明显的区别是,在类示例中,乔和鲍勃似乎在最后一部分中都更改为相同的值。

在结构示例中,它们保留各自的值,只是因为每个变量本身就是一个完整的结构值,而不仅仅是对内存中某处的公共对象的引用。

主要的代码差异是您使用的类型,classstruct,这决定了您是创建引用类型还是值类型。