Vb.net 无法获取派生类以执行函数

Vb.net 无法获取派生类以执行函数,vb.net,class,derived,Vb.net,Class,Derived,我正在做一个作业,我必须创建一个名为Bonus的基类。该类应该包含两个公共属性:一个名为SalesId的字符串属性和一个名为Sales的双属性。我还必须在类中包含一个默认构造函数和一个参数化构造函数。还包括使用以下公式计算销售人员奖金的GetBonus方法(函数): 销售额*.05 然后创建一个名为premiumbunus的派生类。派生类的GetBonu方法应按如下方式计算佣金: 销售额*.05+(销售额-2500)*.01 确保在派生类中包含默认构造函数和参数化构造函数 这是我到目前为止所拥有

我正在做一个作业,我必须创建一个名为Bonus的基类。该类应该包含两个公共属性:一个名为SalesId的字符串属性和一个名为Sales的双属性。我还必须在类中包含一个默认构造函数和一个参数化构造函数。还包括使用以下公式计算销售人员奖金的GetBonus方法(函数): 销售额*.05

然后创建一个名为premiumbunus的派生类。派生类的GetBonu方法应按如下方式计算佣金: 销售额*.05+(销售额-2500)*.01

确保在派生类中包含默认构造函数和参数化构造函数

这是我到目前为止所拥有的,但它只是在必要时计算奖金,而不是溢价

Payroll.vb

Option Explicit On
Option Strict On
Option Infer Off

' base class
Public Class Bonus
    'declare properties
    Public Property SalesId As String
    Public Property Sales As Double

    'default constructor
    Public Sub New()
        _Sales = 0
        _SalesId = String.Empty
    End Sub

    'parameterized constructor
    Public Sub New(ByVal strId As String, ByVal dblB As Double)
        _Sales = dblB
        _SalesId = strId
    End Sub

    'method to calculate the bonus using formula
    Public Overridable Function GetBonus() As Double
        'returns the sales person's bonus
        Return _Sales * 0.05
    End Function
End Class


' derived class
Public Class PremiumBonus
    Inherits Bonus

    Public Sub New()
        MyBase.New()
    End Sub

    Public Sub New(ByVal dblB As Double, ByVal strId As String)
        MyBase.New(CStr(dblB), CDbl(strId))
    End Sub

    Public Overrides Function GetBonus() As Double
        Return MyBase.GetBonus + (Sales - 2500) * 0.01
    End Function
End Class
Main Form.vb

Option Explicit On
Option Strict On
Option Infer Off

Public Class frmMain

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
        Me.Close()
    End Sub

    Private Sub txtSales_Enter(sender As Object, e As EventArgs) Handles txtSales.Enter
        txtSales.SelectAll()
    End Sub

    Private Sub txtSales_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtSales.KeyPress
        If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> "." AndAlso e.KeyChar <> ControlChars.Back Then
            e.Handled = True
        End If
    End Sub

    Private Sub txtSales_TextChanged(sender As Object, e As EventArgs) Handles txtSales.TextChanged
        lblBonus.Text = String.Empty
    End Sub

    Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click
        ' calculates and displays a bonus



        ' if the sales are over $2500, instantiate a PremiumBonus object
        ' and then calculate the bonus
        ' otherwise, instantiate a Bonus object and then calculate the bonus
        Dim myBonus As New Bonus
        Dim myPremiumBonus As New PremiumBonus
        Dim dblSales As Double

        If dblSales > 2500 Then
            Double.TryParse(txtSales.Text, myPremiumBonus.Sales)
            dblSales = myPremiumBonus.GetBonus
        Else
            Double.TryParse(txtSales.Text, myBonus.Sales)
            dblSales = myBonus.GetBonus
        End If

        ' display the bonus
        lblBonus.Text = "ID:" & (txtId.Text).PadRight(6) & dblSales.ToString("C2")
    End Sub
End Class
选项显式打开
选项严格限制在
选项推断
公开课
私有子btnExit\u单击(发送者作为对象,e作为事件参数)处理btnExit。单击
我
端接头
私有子txtSales_Enter(发送者作为对象,e作为事件参数)处理txtSales。Enter
txtSales.SelectAll()
端接头
私有子txtSales_KeyPress(发送方作为对象,e作为KeyPressEventArgs)处理txtSales.KeyPress
如果(e.KeyChar<“0”或lse e e.KeyChar>“9”)和同样的e.KeyChar“。和同样的e.KeyChar控制字符。返回
e、 已处理=真
如果结束
端接头
私有子txtSales_TextChanged(发送者作为对象,e作为事件参数)处理txtSales.TextChanged
lblBonus.Text=String.Empty
端接头
私有子btnCalc_Click(发送方作为对象,e作为事件参数)处理btnCalc。单击
'计算并显示奖金
'如果销售额超过2500美元,请实例化Premiumbunus对象
然后计算奖金
'否则,实例化奖金对象,然后计算奖金
将我的奖金设为新奖金
作为新Premiumbunus的Dim Mypremiumbunus
将dblSales设置为双精度
如果dblSales>2500,则
Double.TryParse(txtSales.Text,myPremiumBonus.Sales)
dblSales=myPremiumBonus.GetBonus
其他的
Double.TryParse(txtSales.Text,myBonus.Sales)
dblSales=myBonus.GetBonus
如果结束
“展示奖金
lblBonus.Text=“ID:&(txtId.Text).PadRight(6)和dblSales.ToString(“C2”)
端接头
末级

我已编辑了您的标题。请参见“”,其中一致意见是“不,他们不应该”。当您检查
dblSales
时,它什么都不是,因为您刚刚创建了它。您如何检查它是否>2500-
if语句
将始终转到elseIt。看起来您正在铸造派生类New(双精度,字符串)但在调用基的代码中,强制转换是反向的。这似乎是问题的根源。尝试将MyBase.New(CStr(dblB)、CDbl(strId))更改为MyBase.New(CDbl(dblB)、CStr(strId))您派生的类正在向基构造函数发送错误的参数???请检查您的逻辑。谢谢,这两项都是我的问题。真不敢相信我竟然忽略了他们。我感谢你的帮助!