Как мне получить доступ к переменной из класса, а затем использовать ее в другом классе для моего оператора if в С#?

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

class UserAccount
{
    decimal balance = 0;
    public void PrintBalance()
    {
        Console.WriteLine("\nYour balance is: {0}", balance);
    }
    
}

в другой класс и хочу использовать его в своем операторе if и, возможно, отредактировать переменную остаток средств

class UserInterface
{
    public UserInterface()
    {
        UserAccount userAccount = new UserAccount();

        Console.WriteLine("~~~Welcome to ATM Service~~~");
        Console.WriteLine("\nPlease select from the following:\n");
        Console.WriteLine("[1] Check Balance");
        Console.WriteLine("[2] Withdraw Cash");
        Console.WriteLine("[3] Deposit Cash");
        Console.WriteLine("[4] Quit ATM Service");
        Console.WriteLine("");
        int userChoice = Convert.ToInt32(Console.ReadLine());

        switch (userChoice)
        {
            case 1:
                userAccount.PrintBalance();
                break;
            case 2:
                Console.WriteLine("Enter amount you wish to withdraw.");
                int withdrawAmount = Convert.ToInt32(Console.ReadLine());
                if (withdrawAmount <= 0)
                {
                    Console.WriteLine("Amount must not be negative number or 0.");
                    break;
                }
                if (withdrawAmount < userAccount.balance)
                {

                }

Я застрял с userAccount.balance в операторе if. Любая помощь будет принята с благодарностью.

Сделайте balance общедоступным свойством, которое затем можно будет инициализировать. Кроме того, по соглашению свойства начинаются с заглавной буквы,

Peter Smith 09.04.2022 12:13

Кроме того, где вы устанавливаете фактические значения UserAccount для клиента?

Peter Smith 09.04.2022 12:14

Вы имеете в виду свойство get & set? я прав?

TxRx21 09.04.2022 12:17
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
35
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

По умолчанию в C# видимость для свойства класса, такого как ваш balance, установлена ​​на private. Вы должны сделать это public, чтобы получить к нему доступ из экземпляра класса.

public decimal Balance { get; set; } = 0;

Советы :

  1. 0 уже является значением по умолчанию для типа decimal в C#, поэтому вам не нужно его устанавливать.
  2. В C#, как правило, мы используем PascalCase для общедоступных свойств/методов.
  3. Геттер/сеттер ({ get; set; }) обычно лучше подходит для общедоступных свойств.

Спасибо большое. Я также хотел бы уточнить, потому что здесь также есть 1 ответ, что он не использовал {get; набор; }. В чем их отличия, если мы их не используем?

TxRx21 09.04.2022 12:19
Ответ принят как подходящий

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

Проще говоря, вы должны использовать, как показано ниже:

public decimal balance = 0;

Хотя это правильно, другой подход заключается в использовании Property Members внутри класса:

public decimal Balance { get; set; }

Для получения дополнительной информации и лучшего понимания различных модификаторов доступа вы можете посетить следующую ссылку:

Модификаторы доступа (Руководство по программированию на C#)

Большое спасибо за ответ. Мне также любопытно, потому что 1 комментарий здесь говорит использовать {get; набор; }. Каковы их различия, если мы используем набор get и если мы не используем?

TxRx21 09.04.2022 12:20

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

Mohi 09.04.2022 12:24

Когда я впервые столкнулся с сеттерами/геттерами, я понятия не имел, где их использовать. Теперь я знаю и буду читать об этом. Большое спасибо за Ваши советы и разъяснения.

TxRx21 09.04.2022 12:27

Вы также можете прочитать эту тему stackoverflow.com/questions/295104/…

Mohi 09.04.2022 12:29

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

private decimal balance;

по собственности

public decimal Balance
{
    return balance;
}

по методу

public decimal getBalance()
{
    return balance;
}

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