引用C#中的另一个字符串
本文关键字:另一个 字符串 引用 | 更新日期: 2023-09-27 18:29:52
据我所知,C#中的字符串是一种引用类型。
因此,在下面的代码中,"a"应该等于"Hi",但它仍然保持其值,即"Hello"。为什么?
string a = "Hello";
string b = a;
b = "Hi";
更相关的是,您误解了引用如何与变量相关。引用不是对变量的引用。把引用想象成一根绳子。你从这个开始:
a----------------------Hello
然后你说"b=a",这意味着将另一段字符串附加到a
所附加的东西上:
a----------------------Hello
/
b---------------------
然后你说"现在把b连接到嗨"
a----------------------Hello
b----------------------Hi
你认为参考文献是这样工作的:
a----------------------Hello
然后我说b
是a
的另一个名称:
a/b ----------------------Hello
然后我更改b
,也就是更改a
,因为它们是同一事物的两个名称:
a/b ----------------------Hi
或者你可能认为参考文献是这样工作的:
a----------------------Hello
那么我说b
指的是a
:
b -------------- a ----------------------Hello
然后我改变b
,这间接地改变了a
:
b -------------- a ----------------------Hi
也就是说,您希望引用变量,而不是值。你可以在C#中这样做,比如:
void M(ref int x)
{
x = 1;
}
...
int y = 0;
M(ref y);
这意味着"在对M的调用期间,x是y的另一个名称"。x的变化会改变y,因为它们是同一个变量。请注意,变量的类型不需要是引用类型。
行b = "Hi";
更改b
引用的字符串。CCD_ 12仍然引用CCD_。
string a = "Hello"; // Set a to reference the string "Hello"
string b = a; // Set b to reference the same string as a
b = "Hi"; // Set b to reference the string "Hi"
您正在更改引用b。而不是a。引用本身被复制,而对象保持不变。因此,b="Hi"将对"Hi"对象的引用复制到b中。这不会影响a。
引用类型的概念在OOP程序员中是最令人困惑的。
运行下面的代码,你会惊讶地看到答案:
创建一个具有Name
属性的简单Book
类,并在应用程序的Main
方法中编写以下代码。
Book a = new Book() {Name = "book a"};
Book b = new Book() {Name = "book b"};
Book c = a; //line 3
Book a = b; //Line 4
Console.WriteLine(c.Name);
毫无疑问,由于第4行,你会期望答案是"b本书"。您认为,当c是a时,之后a变成了b,这也将使c等于b。
事实并非如此!
阅读Ballon类比中的气球anology作为参考类型。
NO!
您所做的是创建对字符串"Hello"的两个引用('a','b')。使用b = "Hi"
,您可以更改"b"以引用字符串"嗨"。
"a"永远不会以这种方式改变。