2012-03-18 17 views
0

私はちょうどC#を使い始めています。私はこの問題に2週間執着しています。私はクラスとサブクラスから値を取得するメインフォームを持っています。私の問題は、CorporateClass VBのオブジェクトを作成しようとすると、私の変数(CarSizeIntegerとDiscountInteger)の2つが割り当てられていないことがわかります。私の質問はなぜですか?私はプログラムの早い段階でそれらを実装しました。助けて!私は絶望している!それは価値を与えています前に、C#Visual Basic継承

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) 
     { 

     } 

    } 
} 
+2

私はあなたのコードをすべて邪魔にならないと思っていた理由が分かりました。 – ChaosPandion

+0

int変数の後ろに「Integer」の接尾辞があります。 – IanNorton

+0

FYI、C#では、小文字で始まるローカル変数に名前を付けるのは慣例的です。 C#とVBのどちらでも、変数に型を指定するのは良い考えです。変数の名前は、その記憶域ではなく、目的*を記述する必要があります。 –

答えて

7

は、C#では、あなたは、変数の値を使用することはできません、またはあなたが割り当てられていない変数エラーが発生します。あなたのコードがあなたにそれを与える理由を見てみましょう。

私はCarSizeIntegerに焦点を当てます。これらの割り当ての3つのすべてがif (EndingOdometerInteger > 0)ブロック内に含まれている

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

注:CarSizeIntegerを初期化しようとすると3ヶ所があります。 EndingOdometerInteger > 0が偽の場合、なしの割り当てが行われます。したがって、後でCarSizeIntegerを使用しようとすると、コンパイラはCarSizeIntegerが初期化されていない可能性があることを検出します。これはエラーです。このエラーを回避するために

、あなたはCarSizeIntegerをデフォルト値与えることができます:ちょうど作る、いずれの場合も

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

int CarSizeInteger = 0; 

またはCarSizeIntegerを初期化し、あなたのif文に他のブロックを追加しますその値を読み取ろうとする前に、各変数に値が与えられていることを確認してください。