Czy oni? Czy, aby przyspieszyć mój program, powinienem przekazać je przez odniesienie?
Czy oni? Czy, aby przyspieszyć mój program, powinienem przekazać je przez odniesienie?
Odpowiedzi:
Odniesienia jest przekazywane przez wartość .
Tablice w .NET są obiektami na stercie, więc masz odniesienie. To odwołanie jest przekazywane przez wartość, co oznacza, że wywołujący zobaczy zmiany w zawartości tablicy, ale ponowne przypisanie tablicy nie:
void Foo(int[] data) {
data[0] = 1; // caller sees this
}
void Bar(int[] data) {
data = new int[20]; // but not this
}
Jeśli dodasz ref
modyfikator, odwołanie jest przekazywane przez odniesienie - a wywołujący zobaczy zmianę powyżej.
Tak, są one domyślnie przekazywane przez odwołanie w języku C #. Wszystkie obiekty w C # są, z wyjątkiem typów wartości. Aby być trochę bardziej precyzyjnym, są one przekazywane „przez odniesienie według wartości”; to znaczy, wartość zmiennej, którą widzisz w metodach, jest odniesieniem do przekazanego oryginalnego obiektu. To jest mały punkt semantyczny, ale czasami może być ważny.