我很難理解C#中ref
關鍵字的作用。 在我的C++代碼中,我創建了一個字符串變量以及指向它的指針和引用變量。我將它傳遞給Delete或Change函數,並且如預期的那樣,所有3個變量都被修改。C#通過引用(ref關鍵字)問題
但是,用C#創建變量x
並使用字符串數據初始化變量。我正在創建一個變量y
,應該引用x
。然後,我將x
與ref
關鍵字一起傳遞給Change
或Delete
方法,從而導致方法內部的變量以及x
被修改。但是,y
未被修改,即使它應該是對x
的引用,就像在C++中一樣。這不僅僅是一個字符串問題,因爲我已經用C#對象嘗試了上述測試,並得到了相同的結果。
這是否意味着y
複製x
當我執行var y = x
?
C++
#include <iostream>
using namespace std;
void Delete(string &variable)
{
variable = "";
}
void Change(string &variable)
{
variable = "changed data";
}
void main()
{
string x = "data";
string *y = &x;
string &z = x;
Delete(x);
}
C#
namespace ConsoleApplication1
{
public class Program
{
public static void Main(string[] args)
{
var x = "data";
var y = x;
Change(ref x);
}
public static void Delete(ref string variable)
{
variable = null;
}
public static void Change(ref string variable)
{
variable = "changed";
}
}
}
@mash:在該示例中,LHS被改變 - 在這個例子中,RHS被改變。 –
問題不在於'ref'關鍵字 - 問題是當x更改時,y不會更新x的值。 –
也考慮在C#中使用'out'關鍵字而不是'ref'(請參閱:http://stackoverflow.com/questions/1516876/when-to-use-ref-vs-out) – Sal