[英]Creation of an object in a try block
我目前正在從事一項家庭作業,但遇到了一個問題,我在書中或在線上也找不到答案。 我不是要找人來修復我的代碼,只需要指出正確的方向。
我目前正在嘗試在try塊中創建一個對象。 在該try塊之前,我要求用戶輸入4個數字。 這4個數字是我嘗試在try塊內創建的對象的參數。 我不確定如何將這些數據從用戶傳遞到try塊中。
我的問題是,我應該如何在try塊內執行對象的創建? 我知道我的當前代碼在觸及try塊后會將所有內容重置為0。
static void Main(string[] args)
{
string choice;
//Input once choice is made----------------------------------------------
do
{
Console.WriteLine("**********************************************");
Console.WriteLine("Create Checking Account \"C\"");
Console.WriteLine("Create Checking Account \"S\"");
Console.WriteLine("Quit the Application \"Q\"");
Console.WriteLine("**********************************************");
Console.Write("Enter choice: ");
choice = Convert.ToString(Console.ReadLine());
if (choice != "Q")
{
switch (choice)
{
case "C":
Console.Write("Enter a name for the Account: ");
CA.setAccountName(Convert.ToString(Console.ReadLine()));
Console.Write("Enter an account Number: ");
CA.setAccountNumber(Convert.ToInt32(Console.ReadLine()));
Console.Write("Enter an initial balance: ");
CA.setBalance(Convert.ToDecimal(Console.ReadLine()));
Console.Write("Enter the fee to be charged per transcation: ");
CA.setFeeCharged(Convert.ToDecimal(Console.ReadLine()));
try
{
CheckingAccount CA = new CheckingAccount("",0,0,0);
CA.PrintAccount();
}
catch (Negative ex)
{
Console.WriteLine("**********************************************");
Console.WriteLine(ex.Message);
}
break;
您不能做的就是在聲明對象之前先引用它。 在參考CA
甚至在這些調用之下被聲明和創建之前,您就已經對其進行了很多調用。
關於try
塊上的問題並創建一個對象:在try
塊外部創建指針,並將其分配到`try塊內部。 然后,假設沒有已處理的異常,您可以在try塊之外訪問它。
// outside of try
CheckingAccount CA = null;
try
{
CA = new CheckingAccount("",0,0,0);
/* Rest of the code unchanged*/
您有一個稱為CA的對象的實例。 在try塊中放置數據之前,在try塊中創建具有相同名稱的新實例,這將覆蓋舊實例,並且數據將丟失。 為什么要在try塊中添加一個新實例?
除了Igor的答案:
您需要先存儲這些值,而不是直接設置剛剛讀取的值,以便以后可以將它們傳遞給對象的構造函數。
代替
CA.setAccountName(Convert.ToString(Console.ReadLine()));
采用
// You probably don't even need the Convert.ToString() here,
// since the read line is already a string.
string accountName = Convert.ToString(Console.ReadLine());
然后
// Do the same for the other values and replace the 0s.
CA = new CheckingAccount(accountName,0,0,0);
在try塊之外創建的變量仍在其中可用。 因此,您可以執行以下操作:
var accountName = Console.ReadLine();
var accountNumber = Int.Parse(Console.ReadLine());
var balance = Decimal.Parse(Console.ReadLine());
var feeCharged = Decimal.Parse(Console.ReadLine());
try
{
var CA = new CheckingAccount(accountName,accountNumber,balance,feeCharged);
CA.PrintAccount();
}
catch
{
// stuff
}
如果需要在try塊之后使用該帳戶,請在聲明之前。 即CheckingAccount CA = null; 在try塊之前的某個地方。
注意:我也會將用戶輸入也處理到try塊中。 用戶輸入無法轉換為數字的內容可能是您要處理的異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.