Jag skriver ett ganska simpelt program (en miniräknare). Det där är inte helt enkelt att göra på "rätt sätt". En enkel work-around är att göra såhär: http://www.devx.com/vb2themax/Tip/18773 Delegates kanske kan vara intressant:Vilken "datatyp" har operatorer?
Jag försöker så mycket som möjligt återanvända kod. Av den anledningen så undrar jag om det finns något sätt för kompilatorn att förstå att tex "+" är +.
Koden nu, för funktionen som skall räkna ut ett svar:
Public Function ekv(ByVal strDisp) As String
If kontrolleraDisp(strDisp) = 1 Then
If _strCalcmeth = "+" Then
_dblSvar = Convert.ToDouble(_strTalMinne) + Convert.ToDouble(strDisp)
End If
_strSvar = Convert.ToString(_dblSvar)
Else
_strSvar = "Detta vart inge bra"
End If
Return _strSvar
End Function
Som det ser ut nu - så kommer det ju bli tvång att skriva en if-sats för varje räknesätt. Detta känns "onödigt" långt? Man tycker att det borde finnas ett sätt som gör att jag kan plocka in ett argument till funktionen vars innehåll är (det vet jag - kör någon form at try.. catch innan) en operator.
Eller?
Sv: Vilken "datatyp" har operatorer?
/JohanSv: Vilken "datatyp" har operatorer?
Public Class Form1
Delegate Function Operation(ByVal Value1 As Double, ByVal Value2 As Double) As Double
Private Function Addition(ByVal Value1 As Double, ByVal Value2 As Double) As Double
Return Value1 + Value2
End Function
Private Function Subtraction(ByVal Value1 As Double, ByVal Value2 As Double) As Double
Return Value1 - Value2
End Function
Private Function Multiplication(ByVal Value1 As Double, ByVal Value2 As Double) As Double
Return Value1 * Value2
End Function
Private Function Division(ByVal Value1 As Double, ByVal Value2 As Double) As Double
Return Value1 / Value2
End Function
Private Sub AdditionButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AdditionButton.Click
op = New Operation(AddressOf Addition)
End Sub
Private Sub SubtractionButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SubtractionButton.Click
op = New Operation(AddressOf Subtraction)
End Sub
Private Sub MultiplicationButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MultiplicationButton.Click
op = New Operation(AddressOf Multiplication)
End Sub
Private Sub DivisionButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DivisionButton.Click
op = New Operation(AddressOf Division)
End Sub
Private op As Operation
Private memory As Double
Private Sub EqualButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EqualButton.Click
If Not op Is Nothing Then
memory = op(memory, Double.Parse(NumberTextBox.Text))
NumberTextBox.Text = memory.ToString()
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
End Class