2010-12-02 9 views
1

私は車を保管するためのアプリケーションを構築しています。車の種類(車、トラック、バス)ごとに個別のフォームをロードするためのボタンが付いたメインフォームがあり、それらはすべて車両クラスから主要プロパティを継承します。私はまた、すべての車両を艦隊に追加できるように、「フリート」クラスを持っています。NotImplementedExecptionが処理されませんでした! STUCK!

私は最初の1台の作業車を手に入れましたが、2台目のトラックに苦労しています。トラックフォームがロードされたボタンをクリックして、データボックスにデータを入力できます。フォームの「閉じる」ボタンは何も起こりません!そして、私がアプリケーションを閉じると、 'NotImplementedExecptionが未処理'になる

アイデアは何ですか?事前に乾杯....

public partial class FrmHireCo : Form 
    /* 
    * This is the main form for the car hire system. 
    * It allows the adding to new cars to the system, and displaying them in the fleet list 
    * 
    */ 
{ 
    private Fleet myFleet = new Fleet(); 
    //Fleet object used to store cars 

    public FrmHireCo() 
    { 
     //Default constructor 
     InitializeComponent(); 
    } 


    private void updateFleetList() 
    { 
     lstFleet.Items.Clear(); 
     foreach (Vehicle v in myFleet.fleet) 
     { 
      lstFleet.Items.Add(v); 
     } 
    } 

    private void btnAddCar_Click(object sender, EventArgs e) 
    { 
     //Add a new car 
     FrmCar carGui = new FrmCar(); //Form used to add new car 
     carGui.ShowDialog(); 
     Car myCar = carGui.car;   //Get new car from form 
     myFleet.addToFleet(myCar);  //Add to fleet list 
     updateFleetList();    //Uodate fleet list 
    } 

    private void lstFleet_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     /* 
     * This method is used to control the list box 
     * It is called when a row is selected by the user, it then displays frmCar 
     * with the car details 
     */ 
     if (lstFleet.SelectedIndex > -1) 
     { 
      int index = lstFleet.SelectedIndex; 
      Car myCar = myFleet.fleet.ElementAt(index); 
      FrmCar carGui = new FrmCar(); 
      carGui.car = myCar; 
      carGui.Show(); 
     } 
    } 

    private void FrmHireCo_Load(object sender, EventArgs e) 
    { 

    } 

    private void btnAddTruck_Click(object sender, EventArgs e) 
    { 
     FrmTruck truckGui = new FrmTruck(); //Form used to add new car 
     truckGui.ShowDialog(); 
     Truck myTruck = truckGui.truck;   //Get new car from form 
     myFleet.addToFleet(myTruck);  //Add to fleet list 
     updateFleetList();    //Uodate fleet list 
    } 

} 

}} などトラックのフォームをロードするためのボタンを持つ私のメインフォームです

、ここに私の艦隊クラスです。私は本当にばかげた何かを見逃していると思う!

class Fleet 
{ 
    /* 
    * This class is used to hold a list of Car objects that make up the fleet: 
    * The car objects may be added through the addToFleet() method. 
    * The car objects may be deleted tgrough the deleteFromFleet() method 
    * Use the fleet property to access the list of car objects 
    */ 

    private List<Vehicle> theFleet = new List<Vehicle>(); //The list of car objects being stored 

    public List<Vehicle> fleet 
     /* The fleet property. Note that you can only read it 
     * use the addToFleet and deleteFromFleet to update it 
     */ 
    { 
     get 
     { 
      return theFleet; 
     } 
    } 

    public void deleteFromFleet(Vehicle aVehicle) 
     //Delete car from fleet 
    { 
     theFleet.Remove(aVehicle); 
    } 

    public void addToFleet(Vehicle aVehicle) 
     //Add car to fleet 
    { 
     theFleet.Add(aVehicle); 
    } 

    internal void addToFleet(Truck myTruck) 
    { 
     throw new NotImplementedException(); 
    } 
} 

}

これは「NotImplementedExceptionが未処理であった出てくるデバッグモードでコードの一部です。

internal void addToFleet(Truck myTruck) 
    { 
     throw new NotImplementedException(); 
    } 
} 

}

+0

この機能を適切に実装するにはどうすればよいですか? –

+0

これはぼんやりとしているため、これを宿題としてタグ付けしました。 – tomfanning

+0

は許可されていませんか? – bettsy583

答えて

0
internal void addToFleet(Truck myTruck) 
{ 
    throw new NotImplementedException(); 
} 

どうやら、あなたは右の機能が実装されているコードの一部の上に練りました。単に "新しいNotImplementedExceptionをスローする"をコードに置き換えます。

+0

私はそれを 'theFleet.Add(aVehicle);と置き換えました。今私は '名前' aVehicle 'は現在のコンテキストに存在しません – bettsy583

+0

"aVehicle"は何ですか?あなたはそれを作成しましたか? – Mattygabe

+0

これを 'theFleet.Add(myTruck);に置き換えてください。 –

1

あなたは、このようなコード使用してオフ最善のようになります。単純に、とにかくこれらの機能を呼び出して、独自のカスタム追加/削除機能を使用するよりも

myFleet.fleet.Add(myTruck); 

を。それがあなたの意図ならば、あなたは隠されていません。

なぜこの問題が発生しているのですか?オーバーロードの解像度を調べ、同じアセンブリ内の何かがそれにアクセスできるということを覚えておく必要があります。その2つのクラスが同じ正確なアセンブリ内にある限り、この問題が引き続き発生します。

+0

だから私はそれをどこに追加するだろうか?それぞれのボタンクリックハンドラー内の – bettsy583

+0

は、現在独自の追加/削除機能を呼び出すコードを置き換えます。 –

+0

同じエラーが表示されますが、メインフォームにある「btnAddTruck」ボタンの背後にあります。 FrmTruck truckGui = new FrmTruck(); //新しい車を追加するために使用されるフォーム truckGui.ShowDialog(); トラックmyTruck = truckGui.truck; myFleet.addToFleet(myTruck); <<このラインにはエラーがあります updateFleetList(); – bettsy583

1

あなたの艦隊にトラックを追加する場合、コンパイラはあなたが渡しているタイプに一致するメソッドを呼び出しているので、あなたが実際にinternal void addToFleet(Truck myTruck)ないpublic void addToFleet(Vehicle aVehicle)を呼んでいる。

ディッチinternal方法。

+0

他のすべてのものは、それが私が欲しいことをするためのコードでよく見えますか?私はそれをあまりにも注視してきたので、論理的に考えることができ、プログラミングにはかなり新しいです! – bettsy583

+1

追加/削除機能が既に 'Fleet'プロパティに公開されているときに、必要な作業を2倍にしています。 –

+0

私はニックに部分的に同意します、それはちょうどあなたの艦隊のコンテナにしたいことに依存します。ニックが言っているように、それが車両のバケツとして動作するようになるとすれば、リストを直接使用するだけで十分です。知性の高いクラスが必要な場合は、艦隊クラスを維持し、それにフリート特有の知識を追加します。 –

1

Visual Studioでは、「Fleet」の「addToFleet」のメソッドスタブを生成するように求められました。 Visual Studioによってメソッドが生成されると、throw new NotImplementedException();が内部に戻り、メソッドを実装して実装する必要があることを通知します。通常は、例外をスローする行を削除し、メソッドに含まれるコードに置き換えます。

しかし、あなたの場合、私はあなたがその方法を全く必要としないと思います。私はトラックが車両から継承すると仮定します。もしそうなら、トラックを取るaddToFleetのオーバーロードもトラックのために働くでしょう。したがって、internal void addToFleet(Truck myTruck)メソッド全体を削除することができます。

関連する問題