簡體   English   中英

C#-從其他類中的另一個類訪問方法?

[英]C# - Accessing methods from another class within other classes?

我最近開始了學習C#的旅程,因此我絕對不是專家。 無論如何,我試圖創建一個面向對象的計算器,但是遇到了一個問題,即我似乎無法訪問某些類中其他類的方法。 我沒有錯誤代碼,但是當我放下斷點並調試應用程序時,變量的值為0。

如果我從DisplayUserData中刪除該方法並將代碼粘貼到我的主程序文件中,它將運行良好。 似乎DisplayUserData類無法傳遞變量或無法從其他類檢索變量,這是為什么?

哦,不好意思的方法,類和變量名。

這是我的主程序文件:

namespace Calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            GetUserInput userInput = new GetUserInput();
            Calculator calculator = new Calculator();
            DisplayUserData displayUserCalculation = new DisplayUserData();


            userInput.MethodOfCalculation();
            userInput.UserNumberInput();
            displayUserCalculation.DisplayCalculatedUserData();

        }
    }
}

接下來是我的GetUserInput類:

namespace Calculator
{
    public class GetUserInput
    {
        public char Choice;
        public decimal ValueOne;
        public decimal ValueTwo;

        public void MethodOfCalculation()
        {
            Console.WriteLine("Welcome to Calculator v.1!");
            Console.WriteLine("Please choose a method of calculation below.");
            Console.WriteLine("1: Addition");
            Console.WriteLine("2: Subtraction");
            Console.Write("Your choice: ");
            Choice = Console.ReadKey().KeyChar;
        }

        public void UserNumberInput()
        {
            Console.Clear();
            Console.WriteLine("Please enter two numbers for calculation!");
            Console.Write("Number One: ");
            ValueOne = Convert.ToDecimal(Console.ReadLine());
            Console.Write("Number Two: ");
            ValueTwo = Convert.ToDecimal(Console.ReadLine());
        }

    }
}

和Calculator類:

namespace Calculator
{
    public class Calculator
    {
        public decimal CalculateUserInput(char userChoice, decimal valueOne, decimal valueTwo)
        {
            decimal calculatedValue = 0;

            switch (userChoice)
            {
                case '1':
                    calculatedValue = valueOne + valueTwo;
                    break;
                case '2':
                    calculatedValue = valueOne - valueTwo;
                    break;
            }

            return calculatedValue;
        }
    }
}

最后是DisplayUserData類:

namespace Calculator
{
    class DisplayUserData
    {
        GetUserInput _userInput = new GetUserInput();
        Calculator _calculator = new Calculator();

        public void DisplayCalculatedUserData()
        {
            decimal calculatedValue = _calculator.CalculateUserInput(_userInput.Choice, _userInput.ValueOne, _userInput.ValueTwo);

            switch (_userInput.Choice)
            {
                case '1':
                    Console.WriteLine("Addition: " + _userInput.ValueOne + " + " + _userInput.ValueTwo + " = " + calculatedValue);
                    break;
                case '2':
                    Console.WriteLine("Subtraction: " + _userInput.ValueOne + " - " + _userInput.ValueTwo + " = " + calculatedValue);
                    break;
            }
        }
    }
}

您正在DisplayUserData類中創建UserInputCalculator類的新版本(實例)。 因為您使用的是新實例,所以這些實例無權訪問main方法中使用的實例中包含的數據。 無需在類中創建新實例,而是將現有實例通過構造函數傳遞給該類使用。

namespace Calculator
{
    class DisplayUserData
    {
        private readonly GetUserInput _userInput;
        private readonly Calculator _calculator;

        DisplayUserData(GetUserInput userInput, Calculator calculator)
        {
            _userInput = userInput;
            _calculator = calculator;
        }

        public void DisplayCalculatedUserData()
        {
            decimal calculatedValue = _calculator.CalculateUserInput(_userInput.Choice, _userInput.ValueOne, _userInput.ValueTwo);

            switch (_userInput.Choice)
            {
                case '1':
                    Console.WriteLine("Addition: " + _userInput.ValueOne + " + " + _userInput.ValueTwo + " = " + calculatedValue);
                    break;
                case '2':
                    Console.WriteLine("Subtraction: " + _userInput.ValueOne + " - " + _userInput.ValueTwo + " = " + calculatedValue);
                    break;
            }
        }
    }
}

然后稱它為

displayUserCalculation.DisplayCalculatedUserData(userInput, calculator);

您的DisplayUserData類所引用的與本程序所引用的計算器和GetUserInput類不同。 您應該像這樣將相同的實例傳遞給DisplayUserData。

class DisplayUserData
{
    readonly GetUserInput _userInput;
    readonly Calculator _calculator;

    public DisplayUserData(Calculator calculator, GetUserInput userInput)
    {
        _calculator = calculator;
        _userInput = userInput;
    }

    public void DisplayCalculatedUserData()
    {
        ...
    }
}

程序將是:

class Program
{
    static void Main(string[] args)
    {
        GetUserInput userInput = new GetUserInput();
        Calculator calculator = new Calculator();
        DisplayUserData displayUserCalculation = new DisplayUserData(calculator, userInput);

        userInput.MethodOfCalculation();
        userInput.UserNumberInput();
        displayUserCalculation.DisplayCalculatedUserData();

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM