【问题标题】:Vb.net Property use another propertyvb.net 属性使用另一个属性
【发布时间】:2017-08-28 05:36:35
【问题描述】:

这是我的程序:

Public Class Form2
    Public Class Component
        Public Shared Methane, Ethane As New Component

        Public Shared ComponentList As New List(Of Component)(New Component( {Methane, Ethane})
        Public Property Mole As Double
        Public Shared MoleSum = ComponentList.Sum(Function(item) item.Mole)
        Public Property NMole As Double = Mole/Molesum
    End Class

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Double.TryParse(TextBox1.Text, Component.Methane.Mole)
    End Sub

    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
        Double.TryParse(TextBox2.Text, Component.Ethane.Mole)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(Component.Methane.NMole)
    End Sub
End Class

所以问题是:

  1. 像我一样在另一个属性中使用属性是否正确?如果不是,我该如何做同样的功能?
  2. 如果在Component 类中提及变量Molesum,则它不起作用。这有什么问题?

【问题讨论】:

  • 请定义“正确使用”。一种定义是,如果它编译,它就是正确的。如果将 New Component( {Methane, Ethane} 替换为 New Component() {Methane, Ethane} 并明确定义 MoleSum As Double,则该代码将编译。这一切是否意味着并做你想要的是一个不同的问题。
  • 如果你使用Option Strict On,它会为你指出一些问题。
  • 您是否打算在任何时候将NMole 设为Mole/Molesum当前 值?还是只打算将其初始化为Mole/Molesum的初始值,然后手动更新?我相信它会按照编码完成后者。同样,您是否打算将Molesum 用作函数,还是将其用作初始值为ComponentList.Sum... 的字段?同样,我相信它会是后者作为编码。
  • 感谢您的回复。所以基本上我想实现以下内容:我将有很多变量,如甲烷、乙烷、丙烷、丁烷等。它们都有一些摩尔质量、校正摩尔质量等。所以,我希望能够做一些计算所有变量的一个(或多个)字段。例如,我需要计算所有变量(一些.Mole)的摩尔质量总和(Molesum),然后对所有变量执行以下操作:.Nmole= .Mole/Molesum。我认为在属性中这样做会很聪明,以避免每个变量都输入过多
  • 正确 - 我的意思是在编码方面,因为我刚开始使用 vb.net 和编码,我想我的想法和实现可能是错误的和低效的。因此,您的任何 cmet 都会受到高度赞赏。

标签: vb.net oop properties


【解决方案1】:

对于遇到同样问题的人,以下解决方案:

Public Class Form2
    Public Class Component
        Public Shared Methane, Ethane As New Component

        Public Shared ComponentList As New List(Of Component)(New Component( {Methane, Ethane})
        Public Property Mole As Double
                Public Shared Function MoleSum() As Double
            Return Component.ComponentList.Sum(Function(item) item.Mole)
        End Function
                Public ReadOnly Property Nmole As Double
            Get
                Return MoleSum()
            End Get
        End Property
    End Class

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Double.TryParse(TextBox1.Text, Component.Methane.Mole)
    End Sub

    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
        Double.TryParse(TextBox2.Text, Component.Ethane.Mole)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(Component.Methane.NMole)
    End Sub
End Class

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2020-07-19
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2016-10-17
    • 1970-01-01
    相关资源
    最近更新 更多