1

我正在构建一个存储车辆的应用程序,我有一个带有按钮的主表单,用于为每种类型的车辆(汽车、卡车、公共汽车)加载单独的表单,它们都从车辆类继承了它们的主要属性。我还有一个“车队”课程,以便所有车辆都可以添加到车队中。

我已经设法让第一辆工作车,但我正在为第二辆(卡车)而苦苦挣扎,我可以点击卡车表单加载的按钮,我可以将数据输入到 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();
    }
}

}

4

4 回答 4

1

看起来在某些时候 Visual Studio 提示您“为 'Fleet' 中的 'addToFleet' 生成方法存根”,而您说是。当 Visual Studio 为您生成一个方法时,它会将其放入throw new NotImplementedException();其中以提醒您需要返回并实现该方法。因此,通常您只需删除引发异常的行并将其替换为方法中属于的任何代码。

但是,就您而言,我认为您根本不需要这种方法。我假设 Truck 继承自 Vehicle;如果是这样,那么接受 Vehicle 的 addToFleet 的重载也适用于 Trucks。所以你可以删除整个internal void addToFleet(Truck myTruck)方法。

于 2010-12-02T20:56:30.967 回答
1

你最好只使用这样的代码:

myFleet.fleet.Add(myTruck);

而不是使用您自己的自定义添加/删除函数,这些函数无论如何都会简单地调用这些函数。如果这是你的意图,你没有隐藏它们。

至于你为什么会遇到这个问题......你应该查找重载解决方案并记住内部意味着同一个程序集中的任何东西都可以访问它,所以只要这两个类在同一个确切的程序集中,你就会继续拥有这个问题。

于 2010-12-02T20:52:03.863 回答
1

当您将卡车添加到您的车队时,您实际上internal void addToFleet(Truck myTruck)不是在调用public void addToFleet(Vehicle aVehicle),因为编译器正在调用与您传入的类型匹配的方法。

放弃internal方法。

于 2010-12-02T20:52:24.510 回答
0
internal void addToFleet(Truck myTruck) 
{ 
    throw new NotImplementedException(); 
} 

显然,您已经忽略了实现该函数的代码部分。只需用您的代码替换“throw new NotImplementedException”即可。

于 2010-12-02T20:49:30.740 回答