繁体   English   中英

引用和值类型C#

[英]reference and value types c#


我正在学习C#内存管理,对我来说很奇怪。
我为Student对象动态分配内存,并以一种方法对其进行了更改-它正在被更改。
我为int对象动态分配内存,并在方法中对其进行了更改-不会更改它。 为什么??

class Student
{
    public int id;
    public string name;
}

class Program
{
    static void Main(string[] args)
    {
        Student s1 = new Student();            
        s1.id = 5;
        s1.name = "myname";

        ChangeStud(s1);

        Console.WriteLine(s1.id);
        Console.WriteLine(s1.name);

        int x = new int();
        x = 2;
        ChangeInt(x);

        Console.WriteLine(x);

    }

    static void ChangeStud(Student s)
    {
        s.id = 500;
        s.name = "changedname";
    }

    static void ChangeInt(int x)
    {
        x = 500;
    }
}

输出为:

500
changedname
2

问题是您正在更改ChangeInt方法中的int,但没有引用该参数,因此可以使用ref关键字或返回该方法的值:

static void ChangeInt(ref int x)
{
    x = 500;
}

要么

static int ChangeInt(int x)
{
    return 500;
}

如果您使用后面的方法,请记住捕捉值

通过值传递类对象类似于以非面向对象的语言传递指向数据结构的指针,因为实际传递的是对象的存储位置。 由于已指定该地址,因此可以修改该地址所指向的内存。

传递标量变量值(例如整数)只是传递值。 被调用的方法不接收int的内存位置,而只是接收值的副本。 任何更改都不会修改原始存储位置中的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM