Я хочу использовать переменную в других файлах, но глобальные переменные не рекомендуются в С#, есть ли другой способ?

Я хочу использовать 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;

Я правильно понял, вы хотите, чтобы глобальной была только переменная сток x? Если да, то определите эту переменную вне метода как общедоступное свойство.

Leon 10.04.2019 15:19

В C# нет Глобальный. Ближе всего это просто public static участник. Сказав это, вы, конечно, можете сделать своего drain членом public своего класса - либо static, либо нет, в зависимости от того, отражает ли drain конкретный пример вашего класса или нет. Вы должны указать, где вы хотите получить доступ к переменной, чтобы мы получили лучшее представление о том, что вам нужно.

HimBromBeere 10.04.2019 15:20

HimBromBeere - я хочу, чтобы другой файл имел к нему доступ и использовал операторы переключения, подобные приведенным выше, но вместо средства выбора будут отображаться метка и запись.

hypnocool 10.04.2019 15:27
I want to ... have other files access it Начните думать с точки зрения классов, а не файлов
Ňɏssa Pøngjǣrdenlarp 10.04.2019 16:18
"элемент не существует в текущем контексте" -- вне класса, в котором они объявлены, вам нужно обращаться к статическим членам, используя имя класса: например. switch (MainPage.item).
Peter Duniho 11.04.2019 02:06

MainPage.item работает. но как мне получить значение, которое оно держит?

hypnocool 11.04.2019 04:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте объявить переменную вне вашего метода с модификатором доступа public static. При этом вы можете получить доступ к его значению из другого файла с синтаксисом ClassName.variableName.

В C# нет глобальных переменных (в том смысле, что они не принадлежат ни к какому классу), ближайший к которым вы можете получить, используя модификатор доступа public.

И "I've read global variables in c# not good" это утверждение неверно, есть много причин для публичного модификатора (самого близкого к глобальной переменной в C#) в c#, ​​поэтому он существует, хороший или нет, зависит от того, как вы его используете.

поэтому я добавил общедоступный частичный класс MainPage: ContentPage { public static string item;

hypnocool 11.04.2019 01:36

Объявление чего-то public не делает его глобальной переменной. Мне кажется, вы путаете термины.

Enigmativity 11.04.2019 01:59

@Enigmativity Я не говорил, что это делает, я просто сказал, что с этим он может получить к нему доступ из других классов.

PrOdiGy 11.04.2019 07:50

@ProdiGy - Тебе нужно объяснить это лучше. Там нет упоминания о том, как вы можете получить доступ «откуда вы хотите». В третьем абзаце вы продолжаете сбивать с толку, предполагая, что модификатор public как-то связан с глобальными переменными.

Enigmativity 11.04.2019 07:56

@Enigmativity Я понял вашу точку зрения, в следующий раз буду точнее :) Public/public static настолько близок к глобальному, насколько это возможно, в c# у нас нет глобальных переменных, как я уже сказал, вот почему, когда я говорил о глобальных переменных хорошо это или нет, я использовал public в третьем абзаце. Но опять же, я признаю, что прозвучало немного запутанно, может быть.

PrOdiGy 11.04.2019 08:10

@ProdiGy - Не могли бы вы исправить ответ?

Enigmativity 11.04.2019 08:23

Другие вопросы по теме