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