Как получить значение переменной из другого класса? [дубликат]
Каким образом мне получить это значение в другом классе? К примеру, в такой конструкции:
У Вас в коде используются статические методы. Это удобно, с точки зрения того, что не нужно создавать экземпляр класса при вызове такого метода — но тогда логично было бы использовать вообще статические классы.
В остальном — использование статических методов (и классов) считается не совсем хорошей практикой, по ряду причин, из которых мне кажутся важными две: статические классы не очень хорошо подходят для тестирования, и вообще подвержены сайд-эффектам и 2) они не могут имплементировать интерфейсы.
Но на самом деле у вас есть другая проблема: у Вас метод класс DogStats запрашивает у пользователя некий ввод, но не сохраняет введенное значение.
Обычно для таких вещей в классах создают поля. То есть, есть поле — "хранитель данных", есть метод — "код, который данные спросит у пользователя".
Поля могут быть приватными, могут быть — и это очень здорово — объявлены как
С этими замечаниями задача становится решаемой, путём совсем небольшой модификации кода:
Вывод программы тогда будет примерно слеующим:
Если у Вас есть вопросы — пишите в комментариях, а вообще из серьезного чтива по C# я бы посоветовал книжку автора Албахари ("Справочник. Полное описание языка") — по этой фамилии она легко гуглится, и перевод одного из изданий, не слишком устаревшего, есть на русском.
Вызов переменной из другого класса
Как я могу получить доступ к переменной в одном общедоступном классе из другого общедоступного класса в C #?
Мне нужно позвонить из:
Заранее спасибо за помощь.
Я работаю в консольном приложении.
задан 08 сен ’09, 01:09
4 ответы
Это было бы просто:
и он также должен быть общедоступным:
Я пробовал это и получаю: Variables.name недоступен из-за уровня защиты — user96377
Вы уверены, что добавили модификатор public. — Натан В
Когда я ответил, я почему-то не увидел добавленный вами модификатор public. Да, сработало. Большое спасибо 🙂 — user96377
Я получаю ссылку на объект, которая требуется для нестатического поля. — Кала Дж
Я бы предложил использовать переменную вместо публичного поля:
Из другого класса вы вызываете свою переменную следующим образом:
На самом деле, ему было бы лучше не иметь переменных внутри статического класса. — ХаосПандион
почему ты так говоришь . почему нет? — Натан В
Возможно, это только я, но я считаю, что делать статические классы полностью не имеющими состояния — это хорошая практика. — ХаосПандион
@Chaos: Ну, я мог бы с тобой согласиться. Но в этом случае имя переменной кажется константой, и мне кажется более элегантным использовать статическую переменную. — Фрэнсис Б.
почему бы не использовать (public const String name = «MyName»;)? — ХаосПандион
Вам необходимо указать модификатор доступа для вашей переменной. В этом случае вы хотите, чтобы он был общедоступным.
Как обратиться к переменной из другого класса c
Лучший отвечающий
Вопрос
- Изменено Errhio 31 января 2014 г. 19:02
Ответы
Сделаем содержимое сообщества лучше, вместе!
- Предложено в качестве ответа Yatajga Moderator 31 января 2014 г. 19:51
- Помечено в качестве ответа Maksim Marinov Microsoft contingent staff, Moderator 10 февраля 2014 г. 10:38
Все ответы
Сделаем содержимое сообщества лучше, вместе!
- Предложено в качестве ответа Yatajga Moderator 31 января 2014 г. 19:51
- Помечено в качестве ответа Maksim Marinov Microsoft contingent staff, Moderator 10 февраля 2014 г. 10:38
Судя по количеству просмотров,
тема актуальна для многих —
я тоже в свое время немало покувыркался с этой проблемой.
Как передать переменную из первичного класса, Form1,
всем поочередно вызываемым методам вторичных классов?
Можно, конечно, пользоваться формальными параметрами,
но это не красиво и утомительно — получается длинная — предлинная цепь.
В конце концов уже и не понятно, какая переменная откуда,
и на каком этапе была послана.
А если нужно наоборот, из какого-то затерявшегося класса
запустить метод в первичном классе,
или скопировать оттуда значение нужной переменной ?
Тем более, что эти манипуляции могут понадобиться из
непредвиденного количества вторичных классов.
А если этот затерявшийся класс к тому же еще помещен
в библиотеку в другом именованном пространстве?
Cледующая программа иллюстрирует
ответы на эти вопросы.
Здесь показаны два класса — Form1 и SecondClass,
в двух различных именованных пространствах — First и Second.
При инициализации первичного класса
запускается SecondMetod во вторичном классе,
который переустанавливает значение переменной FirstString в первичном классе,
а затем возвращает это значение своей переменной S.
Как получить доступ к значению переменной из одного класса в другой?
Я хочу получить доступ к строке из одного класса в другой. Я использовал метод свойств следующим образом:
Я назначаю значение пользователю в функции
Теперь, когда я пытаюсь использовать это значение в своей другой функции, которая вызывается после назначения этого значения
Я получаю пустое значение. Как это сделать?
2 ответа
Вы не используете один и тот же экземпляр. Пытаться
Если все, что вы хотите вернуть, это строка, попробуйте что-то вроде
Как уже упоминалось в комментариях, вы создаете два отдельных экземпляра MyClass которые упрощаются в чем-то вроде:
Вы можете обойти это тремя способами:
1) Используйте один и тот же экземпляр MyClass для второго вызова, но в этом случае вам нужно быть в одной области или передать экземпляр в новую область.