我正在使用CodeSmart 2013来分析我的VB6项目。 审核功能说我应该在我的类属性中添加错误处理(或至少"在错误恢复下")。
我的属性通常如下所示(99%的情况下):
Public Property Let PLZ(ByVal strPlz As String)
myStrPLZ = strPlz
End Property
Public Property Get PLZ() As String
PLZ = myStrPLZ
End Property
当我自动添加错误处理时,它将如下所示:
Public Property Let PLZ(ByVal strPlz As String)
'<EhHeader>
On Error GoTo PLZ_Err
'</EhHeader>
myStrPLZ = strPlz
'<EhFooter>
Exit Property
PLZ_Err:
MsgBox Err.Description & vbCrLf & _
"in TNV.frmSucheTeilnehmer.PLZ " & _
"at line " & Erl, _
vbExclamation + vbOKOnly, "Application Error"
Resume Next
'</EhFooter>
End Property
Public Property Get PLZ() As String
'<EhHeader>
On Error GoTo PLZ_Err
'</EhHeader>
PLZ = myStrPLZ
'<EhFooter>
Exit Property
PLZ_Err:
MsgBox Err.Description & vbCrLf & _
"in TNV.frmSucheTeilnehmer.PLZ " & _
"at line " & Erl, _
vbExclamation + vbOKOnly, "Application Error"
Resume Next
'</EhFooter>
End Property
是否有人在属性中进行错误处理? 这是最佳做法吗?因为这会为我的项目增加很多代码(代码概述会减少imho)
求助! 来自德国的问候 SLimke
答案 0 :(得分:2)
您应该以与在任何方法(子/函数)中相同的方式添加错误处理。
我的经验法则是,如果该方法只有几行,并且没有做任何异国情调,那么就不需要进行错误处理。属性Get / Set
也是如此是向所有属性getter和setter添加错误处理会生成大量代码,因此一个选项可能是使用集中式错误处理。有关此问题的一些讨论,请参阅此帖子:Centralized error handling in VB6
答案 1 :(得分:1)
不要采取这些指导原则(特别是来自某人的程序,他们对自己的最佳实践和#34;需要有自己的看法)。我从未使用它,因此我无法说话(我也不怀疑)它的质量......只是说。
MarkJ也是对的。如果您不需要对属性设置进行任何验证,那么只需将它们设为公共变量即可。如果您以后需要添加验证,将它们变为私有变量并使公共属性Get / Let / Set不会破坏接口,则不需要更改其他代码。至于在每个类属性中添加错误处理程序get / let?为什么?我个人认为,如果有人打算上课,他们至少会花一点时间确保他们知道他们正在做什么以及如何使用它。如果他们错误地设置了一个属性,导致运行时(或编译时)错误,那么他们就会马上知道。
如果设置属性的值来自用户,即
MyClass.SomeProperty = Input("Enter something: ")
然后我个人认为错误代码应放在那里。即。
On Error GoTo StupidUser
MyClass.SomeProperty = Input("Enter something: ")
Exit Sub
ErrorHandler:
MsgBox "You did not supply a correct value!", vbExclamation
否则,当您在课堂上处理错误时,您打算做什么?将它传递给一个集中的错误处理程序,它只会创建更多代码并最终得到相同的结果?用户被通知/写入日志/等等?
我(再次,个人......编程不是黑与白)更喜欢将错误处理代码放入来电例程...使用的程序类,设置属性等。
任何类型的代码优化器/检查器&#34;是由一个人或多个人写的,即使是有信誉的人也会在使用它的人如何运作时引起辩论。
TL; DR:可以安全地忽略一些建议。
答案 2 :(得分:0)
为什么不使用公共字段而不是这些样板属性?
Public PLZ As String
如果以后需要添加逻辑,没问题!您可以将公共字段转换为属性而不会破坏客户端。