簡體   English   中英

在try塊中創建對象

[英]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.

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