Как вызвать переменную в одном классе из другого класса? C#
Короче, если 2 класса. Первый и второй. Так вот, допустим, что во втором класее есть переменная. И ее надо использовать в первом классе. Как?
Голосование за лучший ответ
создать экземпляр второго класса и через точку получить доступ к нужной переменной, но переменная должна иметь идентификатор доступа public, если будет private, то можно получить ее если использовать свойство или метод с идентификатором доступа public, который возвращает переменную с ид. доступа private. пример
class class1
<
private int i=1;
public GetFkinI()
<
return i;
>
>
class class2
<
private void SomeMethod()
<
class1 c1 = new class1;
int i = c1.GetFkinI();
>
>
Используйте Свойства.
IsMythBulletУченик (234) 10 лет назад
http://img.uz/d/2013/10/5254edfa13a5c.jpg — вот пример
IsMythBullet Ученик (234) class Class1 < private int var1 = 1; public int PropVar1 < get < return var1; >set < var1 = value; >> > class Program < static void Main() < Class1 myClass = new Class1(); Console.WriteLine(myClass.PropVar1); //Вернется значение переменной var1 то есть 1. myClass.PropVar1 = 5; // через свойство PropVar1 установили значение переменной var1 5 Console.WriteLine(myClass.PropVar1); // как можно было догадаться вернется значение 5 >>
Как использовать переменную из другого класса java
Если переменная объявлена public , то мы можем получить к ней доступ напрямую, указав имя через точку после имени объекта класса.
Если переменная объявлена private , то необходимо вызвать геттер этой переменной.
class Friend public String name; private String mail; public Friend(String name, String mail) this.name = name; this.mail = mail; > public String getMail() return mail; > > public class App public static void main(String[] args) Friend friend = new Friend("Ivan", "Ivan@mail.ru"); System.out.println(friend.name); // => Ivan System.out.println(friend.getMail()); // => Ivan@mail.ru > >
Как вызвать переменную из другого класса?
Ошибка: CS1061 ‘GameObject» не содержит определения для «HealthWall» и не удалось найти метод расширения «HealthWall», принимающий тип «GameObject» в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
- Вопрос задан более трёх лет назад
- 1252 просмотра
Комментировать
Решения вопроса 1

Denis Gaydak @MrMureno Куратор тега Unity
VR for all
у вас так и не понятно какую переменную из какого скрипта вы хотите вызвать.
и второй кусок кода — не класс, а просто пару строчек
но в общем то случае..если вам нужна глобальная переменная сделайте
public static float HealthWall = 100;
тогда сможете обращаться к ней GameController.HealthWall из любого скрипта
если же хочется не статичными переменными..то или читайте про синглтон (может вам под архитектуру подойдет)
или просто банально ищите через Find или FindObjectOfType — объект с нужным скриптом (если они у вас в сцене)
пока вообще не понятно что куда вы хотите «дернуть» и зачем..отсюда вытекает что толком и не понятно — что вам подсказать)
Ответ написан более трёх лет назад
Alon Mix @alon_mix Автор вопроса
Дак просто во втором скрипте и ничего нет.
Вот скрипт куда мы вызываем. Как мне обьяснили, но способ нехрена не идет. Сейчас ваш попробую.
public class II : MonoBehaviour public GameObject GameController;
GameObject go = GameObject.Find(«GameController»);
GameController gameController = go.GetComponent();
float courrentSpeed = GameController.HealthWall;

Denis Gaydak @MrMureno Куратор тега Unity
все правильно вам объяснили..и должно все отлично работать, разве что в конце
float courrentSpeed = gameController.HealthWall;
от найденного компонента (класса) переменную берем
то что вы указали — должно было выдавать ошибку при компиляции вообще то..
плюс учтите что
GameObject go = GameObject.Find(«GameController»); найдет только в случае точного совпадения имени и если объект активен (не отключен в иерархии сцены)
Alon Mix @alon_mix Автор вопроса
Denis Gaydak, Именно так. У меня скрипт с обьектом называются GameController.Может проблема в этом? И они лежат на сцене. Только мне ошибку компиляции не пишет, только при запуске сцены о том, что нет ссылки на обьект и выводит как раз такие строку с float courrentSpeed = gameController.HealthWall;
float courrentSpeed = gameController.HealthWall;
от найденного компонента (класса) переменную берем
Так и делаю и не понимаю что не так, пишет про ошибку выше сказанную.

Denis Gaydak @MrMureno Куратор тега Unity
не нашло такого скрипта на объекте..возможно у вас есть еще один объект с таким названием в сцене, и нашло GameObject не тот..
вам бы глянуть что оно нашло в
GameObject go = GameObject.Find(«GameController»);
это ж публичное поле..так что посмотреть на что ссылается — public GameObject GameController; проблем быть не должно не каких..
одинаковое название — может конечно багуля в движке, но на моей ппамяти скрипт и объект одинаково называть — не вызывает никаких проблем.
Как вызвать переменную или метод другого класса через строку?
У меня есть множество классов (Страны) с одинаковыми названиями переменных. И есть другой класс который выводит информацию об этих классах. Сейчас пользуюсь таким методом: При вызове инфо класса страна передает ему свое имя через строку а в инфо классе уже делаю.
void Info(string Country) < if(Country == "Italy")< Text.text = Italy.NameOfVariable; >else if(Country == "Russia") < Text.text = Russia.NameOfVariable; >>
Но так как классов много будет очень много лишнего кода, скажите как можно использовать универсальный метод чтобы брать переменную, если это возможно, может быть и не через строку.
- Вопрос задан более трёх лет назад
- 2714 просмотров
Комментировать
Решения вопроса 1

Denis Gaydak @MrMureno Куратор тега Unity
VR for all
ответьте почему у вас множество классов, а не один класс Country, на основе которого сделали себе объект для России и Италии и так далее?
у них у всех будет одинаковые переменные..
public class Country < public string Name; //и другие нужные поля под страну >/////////// //создаем себе объект класса Country russia = new Country(); russia.Name = "Russia"; ////////// //и вот собственно во все инфо и подобное отдаете объект класса Country //в котором все содержиться void Info(Country currentCountry)
конечно еще есть struct вместо класса. и про наследование можно поговорить если будет что то уникальное для каких-то стран.
но вам еще видимо рано такое..
но в общем то, если сильно все упростить, вы просто не использовали ООП — создав на каждую страну свой собственный класс.