Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 了解VB中OOP和继承的帮助_Vb.net_Oop_Inheritance - Fatal编程技术网

Vb.net 了解VB中OOP和继承的帮助

Vb.net 了解VB中OOP和继承的帮助,vb.net,oop,inheritance,Vb.net,Oop,Inheritance,我正在制作一个WinForms应用程序,其中有一个带有文本框和组合框的图形界面,用户可以在其中输入有关车辆的信息,如品牌或颜色。它有两个单选按钮来选择车辆是汽车还是摩托车。它只有两个按钮,一个叫“创建车辆”,另一个叫“显示信息”,在文本框中显示用户输入的所有数据 然后我有Form1、Vehicle、Car、和Motorcicle(两者都继承自Vehicle) 在vehicle、car和motorcicle类中,我拥有所有属性,一个空构造函数和一个带参数的构造函数,以及一个应该显示为每辆车提供的信

我正在制作一个WinForms应用程序,其中有一个带有文本框和组合框的图形界面,用户可以在其中输入有关车辆的信息,如品牌或颜色。它有两个单选按钮来选择车辆是汽车还是摩托车。它只有两个按钮,一个叫“创建车辆”,另一个叫“显示信息”,在文本框中显示用户输入的所有数据

然后我有
Form1
Vehicle
Car
、和
Motorcicle
(两者都继承自
Vehicle

vehicle
car
motorcicle
类中,我拥有所有属性,一个空构造函数和一个带参数的构造函数,以及一个应该显示为每辆车提供的信息的方法

问题是,我不知道在哪里以及如何我应该实例
车辆
或其他类,如果我需要从表单中为每个类的属性分配一个值。如何以及在何处调用该方法


我想所有这些都应该在
表单1
中完成,但是,我是否要从处理create按钮的sub调用它

您可能应该将
车辆
类标记为
MustInherit
(c#中的
abstract
)-这意味着一个类只能用作其他类的基类,并且不能直接实例化(派生类除外)

创建车辆按钮单击事件处理程序中,您应该创建
汽车
摩托车
类的实例,但在显示信息按钮单击事件处理程序中,您应该引用
车辆
类-当然,假设,它有一个名为
GetInfo
MustInherit
方法
此方法应返回字符串,并在派生类中重写。 然后,在事件处理程序中获得信息后,应该在表单上显示

基本上,这样的事情应该让你开始:

Public MustInherit Class Vehicle
    ' this method should only return the info,
    ' it's the calling method that should decide what to do with that info
    Public MustOverride Function GetInfo() As String
End Class

Public Class Car
    Inherits Vehicle

    ' return the car's specific info
    Public Overrides Function GetInfo() As String
    End Function
End Class

Public Class Motorcycle
    Inherits Vehicle

    ' return the motorcycle's specific info
    Public Overrides Function GetInfo() As String
    End Function
End Class

是的,根据您的单选按钮,您的按钮可能会启动车辆的创建,特别是汽车或自行车。你的OOP很简单,但看起来还不错。要记住的重要一点是,你的状态并不代表你的状态;后面应该有对象实例。因此,如果这是一个单表单应用程序,那么可以使用私有属性
列表(车辆)
来保存您的实例,您可以将其添加到按钮中(
.add(New Car(),例如,{.Property1=Value1.Property2=Value2})
。如果您的实例是从表单外部(甚至是内部)修改的,您可以创建表单订阅的事件。实例不应直接修改表单。这是信息在UI和数据之间流动的最佳方式:UI更改>>通过属性的数据,数据更改>>通过事件的UI。您可以向车辆类中添加事件,并在更改属性时引发事件,在创建车辆时以您的表单订阅事件。不过,很抱歉。你的问题很广泛。对于这个平台来说,答案太大了。不过,您可以添加类和按钮事件处理程序的代码,并提出更具体的问题,我们将非常乐意为您提供帮助。乐意帮助:-)