C# Visual Basic Inheritance



我刚开始使用C#,我已经在这个问题上呆了两个星期了。我有一个从类和子类中获取值的主窗体。我的问题是,当我试图创建一个CorporateClassVB对象时,它会告诉我,我的两个变量(CarSizeInteger和DiscountInteger)是未分配的。我的问题是为什么。我在项目的早些时候实施了它们。帮助我被卡住了!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace EX02_CarRentals
{
    public partial class RentalForm : Form
    {
        public RentalForm()
        {
            InitializeComponent();
        }
        private void CloseButton_Click(object sender, EventArgs e)
        {
            Close();
        }
        private void CalculateButton_Click(object sender, EventArgs e)
        {
            int DaysInteger, BeginningOdometerInteger, EndingOdometerInteger, CarSizeInteger, DiscountInteger;
            if (LicenseTextBox.Text != "")
                if (CompactRadioButton.Checked || MidSizeRadioButton.Checked || LuxuryRadioButton.Checked)
                {
                    int.TryParse(DaysRentedTextBox.Text, out DaysInteger);
                    int.TryParse(BeginningOdometerTextBox.Text, out BeginningOdometerInteger);
                    if (BeginningOdometerInteger > 0)
                    {
                        int.TryParse(EndingOdometerTextBox.Text, out EndingOdometerInteger);
                        if (EndingOdometerInteger > 0)
                        {
                            if (CompactRadioButton.Checked)
                                CarSizeInteger = (int)CarSize.Compact;
                            else if (MidSizeRadioButton.Checked)
                                CarSizeInteger = (int)CarSize.MidSize;
                            else CarSizeInteger = (int)CarSize.Luxury;
                        }
                        {
                            if (CorporateRadioButton.Checked || InsuranceRadioButton.Checked)
                            {
                                if (CorporateRadioButton.Checked)
                                    DiscountInteger = (int)Discount.Corporate;
                                else if (InsuranceRadioButton.Checked)
                                    DiscountInteger = (int)Discount.Insurance;
                                //create an instance of the Corporate Class
                                CorporateClass aCorpRental = new CorporateClass(BeginningOdometerInteger, EndingOdometerInteger, CarSizeInteger, DaysInteger, DiscountInteger);
                                AmountDueTextBox.Text = (aCorpRental.getAmountDue()).ToString("C");
                            }
                            else
                            {
                                //create an instance of the Rental Class
                                RentalRate ARental = new RentalRate(BeginningOdometerInteger, EndingOdometerInteger, CarSizeInteger, DaysInteger);
                                AmountDueTextBox.Text = (ARental.getAmountDue()).ToString("C");
                            }
                        }
                    }
                }
            }
        }
        private void DaysRentedTextBox_TextChanged(object sender, EventArgs e)
        {
        }
    }
}

在C#中,在给变量赋值之前,不能使用变量的值,否则会出现未赋值变量错误。让我们看看你的代码为什么会给你这个。

我将重点介绍CarSizeInteger。有三个地方可以尝试初始化CarSizeInteger:

if (EndingOdometerInteger > 0)
{
    if (CompactRadioButton.Checked)
        CarSizeInteger = (int)CarSize.Compact;
    else if (MidSizeRadioButton.Checked)
        CarSizeInteger = (int)CarSize.MidSize;
    else CarSizeInteger = (int)CarSize.Luxury;
}

注意,所有这三个分配都包含在if (EndingOdometerInteger > 0)块内。在EndingOdometerInteger > 0为false的情况下,将不会发生的赋值。因此,当您稍后尝试使用CarSizeInteger时,编译器检测到CarSizeInteger可能未初始化,这是一个错误。

为了避免这个错误,您可以给CarSizeInteger一个默认值:

int CarSizeInteger = 0;

或者在if语句中添加一个else块,初始化CarSizeInteger:

if (EndingOdometerInteger > 0)
{
    // ...
}
else
{
    CarSizeInteger = 0;
}

在任何情况下,只要确保每个变量都有一个值,然后再尝试读取它的值。

最新更新