Как обратиться к переменной из другого метода c
Кроме параметров метода, которые с помощью модификатора ref позволяют передавать значение по ссылке, C# также позволяет с помощью ключевого слова ref возвращать ссылку из метода и определять переменную, которая будет хранить ссылку.
Переменная-ссылка
Для определения локальной переменной-ссылки (ref local) перед ее типом ставится ключевое слово ref :
int x = 5; ref int xRef = ref x;
Здесь переменная xRef указывает не просто на значение переменной x, а на область в памяти, где располагается эта переменная. Для этого перед x также указывается ref.
При этом мы не можем просто определить переменную-ссылку, нам обязательно надо присвоить ей некоторое значение. Так, следующий код вызовет ошибку:
ref int xRef; // ошибка
Получив ссылку, мы можем манипулировать значением по этой ссылке. Например:
int x = 5; ref int xRef = ref x; Console.WriteLine(x); // 5 xRef = 125; Console.WriteLine(x); // 125 x = 625; Console.WriteLine(xRef); // 625
Ссылка как результат функции
Для возвращения из функции ссылки в сигнатуре функции перед возвращаемым типом, а также после оператора return следует указать ключевое слово ref :
int[] numbers = < 1, 2, 3, 4, 5, 6, 7 >; ref int numberRef = ref Find(4, numbers); // ищем число 4 в массиве numberRef = 9; // заменяем 4 на 9 Console.WriteLine(numbers[3]); // 9 ref int Find(int number, int[] numbers) < for (int i = 0; i < numbers.Length; i++) < if (numbers[i] == number) < return ref numbers[i]; // возвращаем ссылку на адрес, а не само значение >> throw new IndexOutOfRangeException("число не найдено"); >
В методе Find ищем число в массиве, но вместо самого значения числа возвращаем ссылку на него в памяти. Для этого в сигнатуре метода в качестве типа результата функции указывается не просто int , а ref int .
Кроме того, в самом методе после слова return также ставится ref :
return ref numbers[i];
Тем самым мы получаем не просто значение, а ссылку на объект в памяти.
В методе Main для определения переменной, которая будет содержать ссылку, используется ключевое слово ref. При вызове метода также указывается слово ref:
ref int numberRef = ref Find(7, numbers);
В итоге переменная numberRef будет содержать ссылку на объект int, и через данную переменную в последствиии мы можем изменить объект по этой ссылке.
Другой пример — возвращение ссылки на максимальное число из двух:
int a = 5; int b = 8; ref int pointer = ref Max(ref a, ref b); pointer = 34; // меняем значением максимального числа Console.WriteLine($"a: b: "); // a: 5 b: 34 ref int Max(ref int n1, ref int n2) < if (n1 >n2) return ref n1; else return ref n2; >
Стоит обратить внимание, что параметры метода в этом случае определены с ключевым словом ref.
При определении метода, который возвращает ссылку, следует учитывать, что такой метод естественно не может иметь тип void. Кроме того, такой метод не может возвращать:
- Значение null
- Константу
- Значение перечисления enum
- Свойство класса или структуры
- Поле для чтения (которое имеет модификатор read-only)
Как обратиться к переменной из другого метода

задача проста: нужно обратится к переменной из одного метода, а рассчитывается она — в другом. как сделать не знаю. в классах — разбираюсь слабо. чтение из БД — работает нормально, с этим проблем нет.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как обратиться к datatable из другого метода?
Уважаемые коллеги! Может где-то глупый вопрос. Проблема следующая. По одной кнопке получаю.
Как можно обратиться к var из другого метода?
Подскажите как можно обратиться к var из другого метода
Как обратиться к методу из другого метода внутри одного и того же класса
Доброго времени суток. Продолжаю изучение C#, и вот моя третья тема (или четвертая, за сегодня) с.
![]()
17447 / 12836 / 3364
Регистрация: 17.09.2011
Сообщений: 21,119
Вынесите переменную за пределы метода, сделав ее членом класса.
Регистрация: 09.04.2012
Сообщений: 42
Объявляй данную переменную в начале класса, и даже если ты хочешь присвоить ей значение именно в методе public void history_load(Form1 form) она останется такой и за пределами метода.
Регистрация: 21.04.2012
Сообщений: 132
прошу прощения, допустил неточность. код выглядит вот так:
из основного класса метод вызывается вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
private void Form1_Load(object sender, EventArgs e) { graph_toolz_bar.history_load(this); // вызов метода загрузки истории } public static void history_load(Form1 form) { *** DateTime data_bar_temp = Convert.ToDateTime(command6.ExecuteScalar()); // чтение даты из БД form.chart2.Titles.Add("График баров"); // обращаюсь к графику *** } public static void add_point(Form1 form, double price, System.DateTime time) { // нужно вывести дату на экран MessageBox.Show(data_bar_temp); // тут вылезает ошибка, что переменная не существует }
если убрать static, то вылезает ошибка:
Error 1 An object reference is required for the non-static field, method, or property ‘Первая_програ_на_смарткоме.graph_toolz_bar.history_load(Первая_програ_на_смартк оме.Form1)’
101 / 100 / 18
Регистрация: 04.09.2009
Сообщений: 133
Предположим что класс называется GraphTools, значит код будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class GraphTools { DateTime data_bar_temp; public static void history_load(Form1 form) { *** data_bar_temp = Convert.ToDateTime(command6.ExecuteScalar()); // чтение даты из БД form.chart2.Titles.Add("График баров"); // обращаюсь к графику *** } public static void add_point(Form1 form, double price, System.DateTime time) { // нужно вывести дату на экран MessageBox.Show(data_bar_temp); } }
Регистрация: 21.04.2012
Сообщений: 132
спасибо dextermd. вот вопросы
поколдовал я с кодом. почитал msdn и вот что написал:
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 47 48 49 50
namespace class_bzz_static { public partial class Form1 : Form { moi_class moi_class = new moi_class(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //klass.metod_1(this); moi_class.metod_1(this); // вызов 1ого метода moi_class.metod_2(this); } } } второй класс, в нем я создал два метода: [CSHARP] namespace class_bzz_static { class moi_class { double z; double x; public void metod_1(Form1 form) { form.chart1.ChartAreas.Add("zzz"); form.chart1.Titles.Add("График баров"); z = 999; } public void metod_2(Form1 form) { x = z + 1; MessageBox.Show(z.ToString()); MessageBox.Show(x.ToString()); } } }
заметил странную вещь, когда у меня в названии методов присутствовал static, то все работало, но я не мог обращаться к переменным, которые определялись в других методах.
сейчас убрал static, но пришлось добавить:
moi_class moi_class = new moi_class(); — создание нового instance (кстати instance, по русски будет — экземпляр?)
после этого, все стало работать нормально. пример выше — работает, без ошибок.
тогда возникает вопрос, как тогда работало в пером варианте, если экземпляр класса не был создан?
я конечно может, все не правильно понимаю. вразумите плиз)
Как обратиться к переменной класса java
Для обращения к переменной класса в Java используется имя объекта и оператор точка ( . ), за которым следует имя переменной. Например, если у вас есть класс Person с переменной name , то для обращения к ней нужно создать объект класса Person и затем использовать оператор точка:
public class Person String name; public Person(String name) this.name = name; > > public class Main public static void main(String[] args) Person person = new Person("Alice"); System.out.println(person.name); // => "Alice" > >
Обратите внимание, что переменная name в классе Person объявлена без модификатора доступа, что означает, что она доступна только в пределах пакета. Если вы хотите, чтобы переменная была доступна из других классов, нужно использовать модификаторы доступа public или protected (в последнем случае переменная за пределами пакета будет доступна только наследникам класса)
Как получить переменную из другого метода одного класса?
Афигенно считал переменную, бро. Может, попробуешь объяснить тс, в чём он неправ? А то чёт получается строчки местами поменял — и всё работает. Магия!

Даниил Демидко @Daniro_San
Программист
Переменные объявленные в методе — недоступны нигде кроме этого метода.
Что бы переменная стала доступна другим методам ее нужно объявить в классе, что и сделал Atllantis выше.
Такая переменная называется полем класса.
А вообще, держите какую нибудь книжку, или справочник по Java под рукой, очень помогает.
Я, когда писал свои первые проекты на плюсах, под рукой держал «C++ для чайников» (да, все было так плохо), для Java посоветую вам «Полный справочник по Java» Герберта Шилдта.
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
adast @adast Автор вопроса
Проблема была немного в другом, я редактировал байт код одного приложения и при объявлении ее в классе я получал краш, так как еще не знал тогда о путях. Поэтому я и искал способ как не вылезать за пределы методов.
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Java
- +4 ещё
В чем ошибка Spring MVC 404?
- 1 подписчик
- 37 минут назад
- 4 просмотра