在try块中创建对象

本文关键字:创建对象 try | 更新日期: 2023-09-27 18:13:12

我目前正在做一项家庭作业,遇到了一个问题,我在书中或网上也找不到答案。我不是在找一个人来修复我的代码,我只需要在正确的方向上指出。

我正在尝试在一个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;

在try块中创建对象

不能在声明对象之前引用它。在引用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块外部创建的变量在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块中。用户输入无法转换为数字的内容可能是您想要处理的异常。