2010-12-02 46 views
1

我建立一個應用程序來存儲車輛,我有上按鈕的主要形式加載單獨的形式爲每種類型的車輛(汽車,卡車,巴士),他們都繼承他們的主要屬性的從車輛類。我也有一個「艦隊」班,這樣所有的車輛都可以加入艦隊。NotImplementedExecption未處理!卡住!

我設法弄到了第一輛工作車,但我掙扎着第二輛車(卡車),我可以點擊卡車表格加載的按鈕,我可以將數據輸入到txt框,但是當我點擊表單上的'關閉'按鈕沒有任何反應!而當我關閉應用程序,我得到一個「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

那麼去給這個函數一個適當的實現? – 2010-12-02 20:47:52

+0

標記爲功課,因爲它公然是。 – tomfanning 2010-12-02 20:55:03

+0

是不允許的? – bettsy583 2010-12-02 21:06:49

回答

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

顯然,你已經掩蓋就在其中函數實現代碼的一部分。只需將「throw new NotImplementedException」替換爲您的代碼即可。

1

你最好關閉只是用這樣的代碼:

myFleet.fleet.Add(myTruck); 

不是使用自己的自定義添加/刪除它簡單地調用這些函數反正功能。如果那是你的意圖,你沒有隱藏它們。

至於爲什麼你得到這個問題......你應該看看了重載決議,並記住,內部是指在同一程序可以訪問任何東西,所以只要這兩個類都在完全相同的組件,你將繼續存在這個問題。

1

當您添加一個卡車車隊,你實際上調用internal void addToFleet(Truck myTruck)沒有public void addToFleet(Vehicle aVehicle)因爲編譯器正在調用您傳遞的類型相匹配的方法。

internal方法。

1

它看起來像在某些時候的Visual Studio提示你「生成方法存根用於‘艦隊’addToFleet'」,你說的沒錯。當Visual Studio爲您生成一個方法時,它將throw new NotImplementedException();放在裏面,提醒您需要返回並實現該方法。所以通常你只要刪除引發異常的行,並將其替換爲方法中的任何代碼即可。

然而,在你的情況,我不認爲你需要的方法在所有。我假設卡車從車輛繼承;如果是這樣,那麼採用Vehicle的addToFleet的重載也適用於卡車。所以你可以刪除整個internal void addToFleet(Truck myTruck)方法。