gpt4 book ai didi

C# 引用对象时正确的图表是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 19:41:05 26 4
gpt4 key购买 nike

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
class Program
{
public class Todo
{
public int Id { get; set; }
public string Name { get; set; }
}

public static void ObjectSwap(ref Todo a, ref Todo b)
{
Todo taskTemp = a;
a = b;
b = taskTemp;
}

static void Main(string[] args)
{
Todo taskOne = new Todo{ Id = 1, Name = "One" };
Todo taskTwo = new Todo{ Id = 2, Name = "Two" };

ObjectSwap(ref taskOne, ref taskTwo);
Console.ReadKey();
}
}
}

谁能给我看这段代码的图表?因为我很困惑,如果它正在创建一个临时对象,然后将它指向 a 指向的地址,然后将 a 的指针更改为 b,然后将 b 更改为 temp

是这样的吗? Diagram A

是不是改变了地址,而是改变了地址的内容?

enter image description here

两者中哪一个看起来更合乎逻辑?我只想知道它是如何工作的,它是改变指针或引用还是改变引用中的内容...

编辑这个怎么样?此代码的图表是否正确?

public static void swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
static void Main(string[] args)
{
int x = 1;
int y = 2;

swap(ref x, ref y);

Console.WriteLine(x);
Console.WriteLine(y);

Console.ReadKey();
}

Diagram C

所以改变的是数据而不是指针?

最佳答案

都没有。我们不复制对象(如两个图中所示),并且我们最终不会得到具有相同身份的多个对象。

我们只有两个对象,只是从左到右移动的箭头。

我用红叉划掉了更多,并添加了正确的蓝色箭头:

enter image description here

关于C# 引用对象时正确的图表是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53334114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com