[英]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
類中創建UserInput
和Calculator
類的新版本(實例)。 因為您使用的是新實例,所以這些實例無權訪問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.