作者leicheong (睡魔)
看板Programming
标题Re: vb.net例外
时间Wed Dec 13 23:50:17 2006
※ 引述《[email protected] (换东西噜)》之铭言:
: 程式已经作了修改,虽然可以执行,但我有若干疑问。
: 以实际生活的例子来说吧
: 当我生产汽车时,
: 1.如果车号小於0 以及汽油量小於0发生了错误,均会产生例外。
: ==>
: 我的疑问是,可以将这两种例外都放在Class CarException内吗?
: 那该怎麽写呢?
可以都用CarException表示, 却无法放在同一个Exception中.
(除非你是指在CarException.Message中说明"错误车号及没有汽油"
这样吧, 不过那种处理方式并不合理)
不过请弄清楚以下两点:
1) Exception的发生表明程式无法继续处理的情况, 因此一次请只处理
一个例外情况.
2) Exception的优点是可以把错误资讯bubble up到合适的Handler,
请善用这一点.(见下文)
: 2.如果车号与汽油量产生例外 当生产线执行show()时,应该要秀出其他讯息
: 而不是"车号是xxx"、"汽油量是xxx"这样的讯息..
: 可否请大家协助,给我些提示,程式已经改到这里,愈来愈像我要的程式,谢谢!
: 附上原始语法:
不要在Constructor显示MessageBox... 在Constructor中发生的问题可以用
Exception传到呼叫Constructor的UI Method处理. (这是把Presentation
和Logic分开的原则)
另外建议 MsgBox(Message) 用 System.Window.Form.MessageBox.Show(Me, Message)
代替, 以方便转写成其他语言, 还有让MessageBox可以正确地Anchor到parent上.
试改如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim car1 As New excar
MsgBox("已生产了汽车")
Dim a As Integer
Dim b As Double
a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
Try
car1.setCar(a, b))
MsgBox("已使车号为" & a & ",使汽油量为" & b)
Catch ex As CarException
MessageBox.Show(ex.Message)
End Try
car1.show()
End Sub
Public Class CarException
Inherits Exception
End Class
Class excar
Private num As Integer
Private gas As Double
Sub New()
num = 0
gas = 0.0
End Sub
Public Function setCar(ByVal n As Integer, ByVal g As Double)
If (g < 0) Then
Throw New CarException("请输入大於0的数字")
End If
num = n
gas = g
End Function
Public Function show()
MsgBox("车号是" & num)
MsgBox("汽油量是" & gas)
End Function
End Class
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.153.21.143