Đây là ví dụ từ một cuốn sách C# mà tôi đang đọc chỉ gặp một chút rắc rối khi hiểu ví dụ này thực sự đang làm gì, giải thích để giúp tôi hiểu thêm về những gì đang xảy ra ở đây.Truyền các mảng bằng giá trị và tham khảo
//creates and initialzes firstArray
int[] firstArray = { 1, 2, 3 };
//Copy the reference in variable firstArray and assign it to firstarraycopy
int[] firstArrayCopy = firstArray;
Console.WriteLine("Test passing firstArray reference by value");
Console.Write("\nContents of firstArray " +
"Before calling FirstDouble:\n\t");
//display contents of firstArray with forloop using counter
for (int i = 0; i < firstArray.Length; i++)
Console.Write("{0} ", firstArray[i]);
//pass variable firstArray by value to FirstDouble
FirstDouble(firstArray);
Console.Write("\n\nContents of firstArray after " +
"calling FirstDouble\n\t");
//display contents of firstArray
for (int i = 0; i < firstArray.Length; i++)
Console.Write("{0} ", firstArray[i]);
// test whether reference was changed by FirstDouble
if (firstArray == firstArrayCopy)
Console.WriteLine(
"\n\nThe references refer to the same array");
else
Console.WriteLine(
"\n\nThe references refer to different arrays");
//method firstdouble with a parameter array
public static void FirstDouble(int[] array)
{
//double each elements value
for (int i = 0; i < array.Length; i++)
array[i] *= 2;
//create new object and assign its reference to array
array = new int[] { 11, 12, 13 };
Về cơ bản có mã những gì tôi muốn biết là cuốn sách đang nói nếu mảng được truyền theo giá trị hơn người gọi ban đầu không được sửa đổi theo phương pháp (từ những gì tôi hiểu). Vì vậy, đối với sự kết thúc của phương pháp FirstDouble họ cố gắng và gán mảng biến cục bộ cho một tập hợp các phần tử mới thất bại và các giá trị mới của người gọi ban đầu khi được hiển thị là 2,4,6.
Bây giờ sự nhầm lẫn của tôi là cách vòng lặp for trong phương thức FirstDouble thay đổi người gọi ban đầu firstArray thành 2,4,6 nếu nó được truyền theo giá trị. Tôi nghĩ rằng giá trị nên vẫn còn 1,2,3.
Cảm ơn trước
bản sao có thể có của [Loại giá trị và vấn đề loại tham chiếu] (http://stackoverflow.com/questions/6070892/value-type-and-reference-type-problem) –
@AlexeiLevenkov Với điều này được đề cập ở những nơi khác, tôi 'd ghét để đóng cho rằng một: ( –