Как вызвать переменную из другого класса в C # (мобильное приложение)

#c# #class #variables

#c# #класс #переменные

Вопрос:

Я работаю над Visual Studio 2019. У меня есть переменная с именем «batt_lev», которая находится в BatteryAlert.Android -> BatteryService1.cs Мне нужно вызвать эту переменную в общем коде в MainPage.xaml.cs в методе с именем «void Etichetta ()», где я должен использовать переменную. Как вы можете видеть, я пытался использовать BatteryService1.batt_lev, но ошибка «нет BatteryService1 в этом контексте».

Кто-нибудь может мне помочь?

MainPage.xaml.cs в общем коде

 namespace BatteryAlert
{
    public partial class MainPage : ContentPage
    {
        private double batt_lev;
        


        public MainPage()
        {
            
            InitializeComponent();
            DependencyService.Get<IUpLoad>().upLoad();
            //Etichetta();
            //DependencyService.Get<IAndroidService>().StartServicee();
            //Battery.BatteryInfoChanged  = Battery_BatteryInfoChanged;
            

        }

        void Etichetta()
        {
            
            //Battery.BatteryInfoChanged  = Battery_BatteryInfoChanged;
 
            batt_lev = (float)Battery.ChargeLevel;
            CounterLabel.Text = BatteryService1.batt_lev.ToString("N2");
        }
    }
}
 

BatteryService1.cs в BatteryAlert.Android

 namespace BatteryAlert.Droid
{
    [Service(Name = "com.companyname.BatteryAlert.BatteryService1")]
    public class BatteryService1 : JobIntentService
    {
        private static int MY_JOB_ID = 1000;
        public double batt_lev;
        List<double> valoreControllo = new List<double>()
        {
            0.65, 0.60, 0.55, 0.50, 0.45, 0.40, 0.35, 0.30, 0.25, 0.20, 0.15, 0.10, 0.05
        };


        protected override void OnHandleWork(Intent p0)
        {
            Device.StartTimer(new TimeSpan(0, 0, 10), () =>
            {
                // do something every 10 seconds
                Battery.BatteryInfoChanged  = Battery_BatteryInfoChanged;
                //DependencyService.Get<IAudio>().PlayAudioFile("suono_123.wav");
                return true; // runs again, or false to stop
            });
            
        }

        public static void EnqueueWork(Context context, Intent work)
        {
            Java.Lang.Class cls = Java.Lang.Class.FromType(typeof(BatteryService1));

            try
            {
                EnqueueWork(context, cls, MY_JOB_ID, work);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: {0}", ex.Message);
            }

        }

        void Battery_BatteryInfoChanged(Object sender, BatteryInfoChangedEventArgs e)
        {
            batt_lev = (double)e.ChargeLevel;
            batt_lev = Math.Round(batt_lev, 2);

            if (valoreControllo.Contains(batt_lev))
            {
                //CounterLabel.Text = batt_lev.ToString("N2");
                DependencyService.Get<IAudio>().PlayAudioFile("suono_123.wav");
            }

        }
    }
}
 

Комментарии:

1. batt_lev не является статическим, поэтому для доступа к нему необходимо создать экземпляр BatteryService1. Кажется, вы используете внедрение зависимостей, поэтому вам следует ввести BatteryService1, чтобы использовать его

2. хорошо, я кое-что прочитал в интернете, это кажется очень сложным, имейте в виду, что я использовал и адаптировал приведенный выше код, поэтому я не знаю, как «внедрить BatteryService1». Можете ли вы дать мне несколько других советов? Спасибо!

Ответ №1:

Если вы хотите получить доступ к переменной из другого класса, у вас должен быть этот класс, производный от класса, который вы хотите использовать.

 public partial class MainPage : ContentPage
 

Если вы хотите, чтобы для ContentPage все еще была получена MainPage, вы должны вывести нужный класс (BatteryService1) на ContentPage или наоборот. Вот так:

 public class ContentPage : BatteryService1