Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93

Передача объекта аргументу метода

26.10.2013, 11:34. Показов 887. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я немного запутался. Перелистывая очередную страницу Шилдта, узнал, о том, что передача аргументов методам по умолчанию осуществляется как копия. То бишь изменив аргумент внутри метода, он никак не изменится за его пределами. А если возникает такая необходимость, то мы передаем его по ссылке, используя ref. Так вот, насколько мне известно, когда в качестве передаваемого параметра выступает объект какого-либо класса, то он уже автоматически передается по ссылке, что означает, что мы можем изменить какую-либо переменную внутри метода и она изменится в основной программе. Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System; 
 
class Test { 
  public int a, b; 
 
  public Test(int i, int j) { 
    a = i; 
    b = j; 
  } 
 
  public void Change(Test ob) { 
    ob.a = ob.a + ob.b; 
    ob.b = -ob.b; 
  } 
}
Тут все понятно. Однако меня смутило следующее. Почему тогда в следующем примере для того, чтобы поменять объекты местами, нужно обязательно использовать ref?? Ведь они же и так должны быть переданы по ссылке ??
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System; 
 
class RefSwap { 
  int a, b; 
   
  public RefSwap(int i, int j) { 
    a = i; 
    b = j; 
  } 
 
  public void Show() { 
    Console.WriteLine("a: {0}, b: {1}", a, b); 
  } 
 
  public void Swap(ref RefSwap ob1, ref RefSwap ob2) { 
    RefSwap t; 
  
    t = ob1; 
    ob1 = ob2; 
    ob2 = t; 
  } 
} 
 
class RefSwapDemo { 
  static void Main() { 
    RefSwap x = new RefSwap(1, 2); 
    RefSwap y = new RefSwap(3, 4); 
 
    Console.Write("x before call: "); 
    x.Show(); 
 
    Console.Write("y before call: "); 
    y.Show(); 
 
    Console.WriteLine(); 
 
    x.Swap(ref x, ref y);  
 
    Console.Write("x after call: "); 
    x.Show(); 
 
    Console.Write("y after call: "); 
    y.Show(); 
 
  } 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2013, 11:34
Ответы с готовыми решениями:

Передача всего объекта в метод Main для вызова метода
Добрый день! Подскажите пожалуйста. Есть например класс Student. В нём есть свойства IdStudentKurs LastName FirstName IdGroup ...

Передача объекта в качестве аргумента функции (метода)
На "Интуите" имеем код: class Complex { public: int real; // вещественная часть int imaginary; // мнимая часть ...

Вызов метода объекта внутри определения метода другого объекта(вложенные классы)
Как мне вызвать метод объекта slider класса Slider внутри определения метода объекта класса StateBar? class StateBar { public: ...

1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.10.2013, 12:30
потому что сама ссылка является примитивным типом
C#
1
2
3
4
5
6
7
8
9
10
11
12
class Foo
{
    void Spam()
    {
        Foo r = new Foo();
        Bar(r); //в Bar попадает копия ссылки r
    }
 
    void Bar(Foo f) //f и r это две разные ссылки которые ссылаются на один и тот же объект
    {//модифицируя f мы не изменим r
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2013, 12:30
Помогаю со студенческими работами здесь

Передача данных аргументу вектору
Здравствуйте, решил настроить быструю сортировку(которая на этом форуме) под себя, чтобы отсортировать числа из одного файле, но столкнулся...

Передача имени формы в процедуру и в процедуре вызов метода объекта формы
Есть несколько форм: FrmMain, Frm2, Frm3. На каждой форме есть RichEdit под именем RchEdtLog. Нужна процедура Log которая должна...

Передача метода в метод, метода как параметр
Здравствуйте друзья. Есть значит некоторый фрейм: public class Window extends JFrame implements ActionListener { ... (1) ......

Передача объекта из одного экземпляра класса в другой с запретом обращаться к методам и свойствам этого объекта
Всем привет! Есть класс, в котором используется объект (MyObject, объявленный в private). При создании второго экземпляра этого класса...

Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru