gpt4 book ai didi

c# - 对象是引用类型还是值类型?

转载 作者:IT王子 更新时间:2023-10-29 04:37:36 25 4
gpt4 key购买 nike

我对object还有疑问。它是任何事物、任何类的主要基类。但是它是引用类型还是值类型。或者喜欢这些行为中的哪一个呢?我需要弄清楚这一点。我很难理解这一点。

     object obj1 = "OldString";
object obj2 = obj1;
obj1 = "NewString";
MessageBox.Show(obj1 + " " + obj2);
//Output is "NewString OldString"

在这种情况下,它就像一个值类型。如果对象是引用类型那么为什么 obj2 值仍然是“OldString”

   class SampleClass
{
public string Text { get; set; }
}

SampleClass Sample1 = new SampleClass();
Sample1.Text="OldText";

object refer1 = Sample1;
object refer2 = refer1;

Sample1.Text = "NewText";

MessageBox.Show((refer1 as SampleClass).Text + (refer2 as SampleClass).Text);
//OutPut is "NewText NewText"

在这种情况下它就像引用类型一样

我们可以推断出 object 的类型就是您在其中装箱的内容。它既可以是引用类型,也可以是值类型。这是关于你装在里面的东西。我说得对吗?

最佳答案

是引用类型

用字符串做一个例子不是很有启发性,因为字符串也是引用类型(显然SampleClass也是);您的示例包含零“装箱”。

if object is reference type then why obj2 value is still "OldString"

为什么不呢?当您创建一个新字符串 时,不会更改旧引用以指向新字符串。考虑:

 object obj1 = "OldString";
// create a new string; assign obj1 the reference to that new string "OldString"

object obj2 = obj1;
// copy the reference from obj1 and assign into obj2; obj2 now refers to
// the same string instance

obj1 = "NewString";
// create a new string and assign that new reference to obj1; note we haven't
// changed obj2 - that still points to the original string, "OldString"

关于c# - 对象是引用类型还是值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673029/

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