Я хочу использовать vardrinkx и предоставить другим файлам доступ к нему
Я читал глобальные переменные в С# не очень хорошо, ища другой способ, чтобы другие файлы могли получить к ним доступ, не делая их глобальными. или я могу сделать этот метод общедоступным недействительным ItemSelected (отправитель объекта, System.EventArgs e). но тогда мне не нужны операторы переключения, которые идут с ним, мне нужна переменная только тогда, когда пользователь выбирает число.
//this is fired when user changes or selects new selection
void ItemSelected(object sender, System.EventArgs e)
{
//to get value user selected
var drainx = drain.Items[drain.SelectedIndex];
switch (drainx)
{
case "1":
DisplayAlert(drainx, "selected Value", "OK");
drainPicker1();
drain2Picker.IsVisible = false;
drain3Picker.IsVisible = false;
drain4Picker.IsVisible = false;
break;
case "2":
DisplayAlert(drainx, "selected Value", "OK");
drain1Picker.IsVisible = true;
drain2Picker.IsVisible = true;
drain3Picker.IsVisible = false;
drain4Picker.IsVisible = false;
break;
}
}
ОБНОВЛЕНИЕ: сделать его общедоступным
public partial class MainPage : ContentPage
{
public static string item;
Я хочу, чтобы этот класс в другом файле получил к нему доступ, но "элемент" является ошибкой - элемент не существует в его текущем контексте.
public AddNewDataPage()
{
InitializeComponent();
switch (item)
{
ОБНОВЛЕНИЕ: ниже теперь это работает. я вижу переменную, но мне также нравится использовать ее значение. ЕСТЬ ИДЕИ?
switch (MainPage.item)
{
case "1":
DisplayAlert(MainPage.item, "selected Value", "OK");
break;
В C# нет Глобальный. Ближе всего это просто public static
участник. Сказав это, вы, конечно, можете сделать своего drain
членом public
своего класса - либо static
, либо нет, в зависимости от того, отражает ли drain
конкретный пример вашего класса или нет. Вы должны указать, где вы хотите получить доступ к переменной, чтобы мы получили лучшее представление о том, что вам нужно.
HimBromBeere - я хочу, чтобы другой файл имел к нему доступ и использовал операторы переключения, подобные приведенным выше, но вместо средства выбора будут отображаться метка и запись.
I want to ... have other files access it
Начните думать с точки зрения классов, а не файлов
switch (MainPage.item)
.
MainPage.item работает. но как мне получить значение, которое оно держит?
Попробуйте объявить переменную вне вашего метода с модификатором доступа public static
. При этом вы можете получить доступ к его значению из другого файла с синтаксисом ClassName.variableName
.
В C# нет глобальных переменных (в том смысле, что они не принадлежат ни к какому классу), ближайший к которым вы можете получить, используя модификатор доступа public
.
И "I've read global variables in c# not good"
это утверждение неверно, есть много причин для публичного модификатора (самого близкого к глобальной переменной в C#) в c#, поэтому он существует, хороший или нет, зависит от того, как вы его используете.
поэтому я добавил общедоступный частичный класс MainPage: ContentPage { public static string item;
Объявление чего-то public
не делает его глобальной переменной. Мне кажется, вы путаете термины.
@Enigmativity Я не говорил, что это делает, я просто сказал, что с этим он может получить к нему доступ из других классов.
@ProdiGy - Тебе нужно объяснить это лучше. Там нет упоминания о том, как вы можете получить доступ «откуда вы хотите». В третьем абзаце вы продолжаете сбивать с толку, предполагая, что модификатор public
как-то связан с глобальными переменными.
@Enigmativity Я понял вашу точку зрения, в следующий раз буду точнее :) Public/public static настолько близок к глобальному, насколько это возможно, в c# у нас нет глобальных переменных, как я уже сказал, вот почему, когда я говорил о глобальных переменных хорошо это или нет, я использовал public в третьем абзаце. Но опять же, я признаю, что прозвучало немного запутанно, может быть.
@ProdiGy - Не могли бы вы исправить ответ?
Я правильно понял, вы хотите, чтобы глобальной была только переменная сток x? Если да, то определите эту переменную вне метода как общедоступное свойство.