В C# доступ к переменной, объявленной в одном скрипте, из другого скрипта без использования static может быть достигнут с помощью следующих механизмов и концепций языка:
1. Использование других средств связи между скриптами. Например, можно передавать информацию через параметры методов, аргументы событий и делегаты. Это позволяет передать значение переменной bool из одного скрипта в другой.
Например:
// Скрипт 1 public class Script1 { public void MethodWithBoolParam(bool value) { // Делаем что-то с переданным значением bool } } // Скрипт 2 public class Script2 { private void SomeMethod() { bool myBoolValue = true; Script1 script1 = new Script1(); script1.MethodWithBoolParam(myBoolValue); } }
2. Использование событий и делегатов. Это мощный механизм в C#, позволяющий установить связь между объектами и передавать информацию от одного объекта к другому без использования статических переменных.
Например:
// Скрипт 1 public class Script1 { public delegate void BoolValueDelegate(bool value); public event BoolValueDelegate OnBoolValueChanged; private bool myBoolValue; public bool MyBoolValue { get { return myBoolValue; } set { myBoolValue = value; OnBoolValueChanged?.Invoke(myBoolValue); } } } // Скрипт 2 public class Script2 { private void SomeMethod() { Script1 script1 = new Script1(); script1.OnBoolValueChanged += HandleBoolValueChanged; } private void HandleBoolValueChanged(bool value) { // Делаем что-то с полученным значением bool } }
3. Использование класса-контейнера или паттерна проектирования для обмена данными между скриптами. Например, можно создать класс-контейнер с нужными свойствами и передавать экземпляр этого класса между скриптами.
Например:
// Скрипт 1 public class Script1 { private Container container; public Script1(Container container) { this.container = container; } private void SomeMethod() { bool myBoolValue = container.MyBoolValue; // Делаем что-то с полученным значением bool } } // Скрипт 2 public class Script2 { private void SomeMethod() { Container container = new Container(); container.MyBoolValue = true; Script1 script1 = new Script1(container); } } // Класс-контейнер public class Container { public bool MyBoolValue { get; set; } }
Все эти методы и концепции позволяют обмениваться данными между скриптами без использования static переменных. Выбор конкретного метода зависит от контекста вашего приложения и требований к архитектуре.