Họ có? Hoặc để tăng tốc chương trình của tôi, tôi nên chuyển chúng bằng cách tham chiếu?
Họ có? Hoặc để tăng tốc chương trình của tôi, tôi nên chuyển chúng bằng cách tham chiếu?
Câu trả lời:
Các tài liệu tham khảo được truyền theo giá trị .
Mảng trong .NET là đối tượng trên heap, vì vậy bạn có một tham chiếu. Tham chiếu đó được chuyển bằng giá trị, nghĩa là người gọi sẽ nhìn thấy các thay đổi đối với nội dung của mảng, nhưng việc gán lại mảng sẽ không:
void Foo(int[] data) {
data[0] = 1; // caller sees this
}
void Bar(int[] data) {
data = new int[20]; // but not this
}
Nếu bạn thêm công cụ ref
sửa đổi, tham chiếu sẽ được chuyển bằng tham chiếu - và người gọi sẽ thấy một trong hai thay đổi ở trên.
Có, chúng được chuyển theo tham chiếu theo mặc định trong C #. Tất cả các đối tượng trong C # đều là, ngoại trừ các kiểu giá trị. Nói chính xác hơn một chút, chúng được chuyển "bằng tham chiếu theo giá trị"; nghĩa là giá trị của biến mà bạn thấy trong các phương thức của mình là một tham chiếu đến đối tượng ban đầu được truyền vào. Đây là một điểm ngữ nghĩa nhỏ, nhưng đôi khi có thể quan trọng.