Re: vb.net例外
※ 引述《Quota.bbs@bbs.mcu.edu.tw (換東西嚕)》之銘言:
: 程式已經作了修改,雖然可以執行,但我有若干疑問。
: 以實際生活的例子來說吧
: 當我生產汽車時,
: 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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章