Điều gì sẽ xảy ra nếu tôi chuyển một thành viên dữ liệu bằng cách tham chiếu đến một hàm, và trong khi chức năng đó đang chạy, Garbage Collector bắt đầu chạy và di chuyển đối tượng chứa thành viên dữ liệu trong bộ nhớ?truyền dữ liệu thành viên bằng cách tham khảo
class SomeClass
{
int someDataMember;
void someMethod()
{
SomeClass.someFunction(ref someDataMember);
}
static void someFunction(ref int i)
{
i = 42;
int[] dummy = new int[1234567890];
// suppose the Garbage Collector kicks in here
i = 97;
}
}
CLR đảm bảo thông số tham chiếu không trở nên không hợp lệ trong khi thu thập rác? Chúng có được điều chỉnh giống như tham khảo lớp học không?
có thể trùng lặp của [tham số C# bằng tham chiếu và thu gom rác .net] (http://stackoverflow.com/questions/2500851/c-sharp-parameters-by-reference-and-net-garbage-collection) –
Eric Câu trả lời của Lippert cho câu hỏi được liên kết của @ rightfold trả lời điều này một cách hoàn hảo. –
Chúng được điều chỉnh, bởi vì bất kỳ tham số phương pháp nào được coi là gốc, và tất cả các gốc đều được điều chỉnh (nó nói trong cuốn sách "CLR via C#") –