#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