您通過參考字符串。您沒有傳遞對變量的引用。如果你想改變一個變量然後你做這樣的:
private void ReplaceIfEmpty(ref string originalValue, string newValue) ...
的差異經常混淆的人。這樣想一想。不要想象一串,想象兩個房子。現在想象兩張有這些房屋地址的紙張;那些是參考到房子。現在想象四個抽屜,每個抽屜都包含一張紙。抽屜標有p,q,x和y:
void M(House x, House y)
{
x = y;
}
...
House p = new House("123 Sesame Street");
House q = new House("1600 Pennsylvania Avenue");
M(p, q);
這個程序是做什麼的?你把一張紙放在抽屜裏寫上「123芝麻街」。你把一張紙放在抽屜裏寫上「1600 Pennsylvania Avenue」。
您在抽屜p中複印紙張並將複印件放入抽屜x中。您在抽屜q上覆印紙張並將複印件放入抽屜y中。然後你打電話給M. M把抽屜裏的東西複印一份,放在抽屜x裏。 抽屜p不受影響。
現在考慮這種情況下:
void M(ref House r, House s)
{
r = s;
}
...
House p = new House("123 Sesame Street");
House q = new House("1600 Pennsylvania Avenue");
M(ref p, q);
這是什麼節目呢?你把一張紙放在抽屜裏寫上「123芝麻街」。你把一張紙放在抽屜裏寫上「1600 Pennsylvania Avenue」。
您在抽屜p上貼上一張便條,上面寫着「這個抽屜也被稱爲r」。
您在抽屜q中複印紙張並將複印件放入抽屜中。
然後你打電話給M. M把抽屜裏的東西複印一份,放在抽屜裏,這和抽屜p一樣。
有意義嗎?
可能的重複http://stackoverflow.com/questions/636932/in-c-why-is-string-a-reference-type-that-behaves-like-a-value-type – 2012-02-22 16:49:39