【问题标题】:Is possible to do "data control flow" during class initialization in VB.NET?在 VB.NET 中的类初始化期间可以做“数据控制流”吗?
【发布时间】:2019-03-07 14:48:55
【问题描述】:

在下面的代码中,我尝试在 if..then 块中插入 End 语句,以检查传递给构造函数的温度值是否在 -20 到 +50 度之间,如果没有要求,则最终结束程序执行遇见了。 Visual Studio 告诉“End 语句不能在类库项目中使用”。检查传递给类构造函数的参数正确性的良好做法/方法是什么? (我已经读过异常不应用于执行数据控制流,因为应使用异常来解决“意外行为”,在这种情况下,我应该期望用户可能会尝试插入超出此类允许范围的值有意义)。

谢谢

Public Class WaterGlycoleMixture
     Implements ICoolingFluid

     Private _temperature As Double
     Private _glycolePercentage As Double

     Public Sub New(temperature As Double, glycolePercentage As Double)

          If -20 < temperature < 50 Then
               MessageBox.Show("Error: Temperature Range must be between -20 e +50°C")
                End
          End If

          _temperature = temperature
          _glycolePercentage = glycolePercentage
     End Sub


    'Some more methods and properties here




End Class

【问题讨论】:

  • 这只是无效的语法。没有 End 声明这样的东西。你结束了一个If 块,或While 循环,或ClassNamespace,等等。但所有这些都必须按照正确的顺序(你不能在一个if 块之前结束while 循环例如,您结束 if 块),并且您永远不会在 VB 中将End 单独放在一行中。
  • @JoelCoehoorn :实际上你可以,看:End Statement | Microsoft Docs 它基本上等同于Environment.Exit(0)
  • 是:阅读异常处理。它们在这里完全合适。
  • @JoelCoehoorn 俗话说,您可能忘记的 VB.NET 比其他人学到的更多。 ;-)
  • @Visual Vincent:事实上,如果传递的值不可接受,我想做的是暂停所有程序。由于验证函数实际上在类内部,在类初始化期间执行数据控制流并最终使程序对一些错误值做出反应的最佳策略/最佳实践是什么?

标签: .net vb.net oop


【解决方案1】:

如果你传递了一个错误的参数,你绝对可以抛出一个异常。 .NET Framework 定义了一个普通的异常类 ArgumentException,正是出于这个原因。

在图书馆的情况下尤其如此。应该由调用代码以适当的方式处理异常。如果它是一个 GUI 应用程序,那么它可以向用户显示一条消息。如果它是 Windows 服务,那么日志记录可能更合适。图书馆不应该做出假设。

【讨论】:

  • 谢谢,我不知道 ArgumentException。我对编程很陌生。
猜你喜欢
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多