【问题标题】:How to get name to refer to property rather than class in VB.NET?如何在 VB.NET 中获取名称以引用属性而不是类?
【发布时间】:2014-04-17 16:56:14
【问题描述】:

比较以下几组 VB.NET 类:

Public Class MyProperties
    Private Shared m_customer As Customer
    Public Shared Property Customer() As Customer
        ' getter and setter code 
    End Property
End Class

Public Class Customer
    Public Field1 As String
End Class

Public Class MyOtherClass
     Sub Proc1
          Debug.WriteLine(Customer.Field1)  ' this does not compile
     End Sub
End Class

-----------------------------------------

Public Class Customer
    Public Field1 As String
End Class

Public Class MyOtherClass
    Private Shared m_customer As Customer
    Public Shared Property Customer() As Customer
        ' getter and setter code 
    End Property
    Sub Proc1       
        Debug.WriteLine(Customer.Field1)  ' this compiles
    End Sub
End Class

可以做些什么来编译顶部段?

this 可以帮忙吗?

【问题讨论】:

    标签: .net vb.net class properties


    【解决方案1】:

    在第二组代码中,Customer 指的是 current 类的 Customer property(与 Me.Customer 相同)。然后,您可以通过 instance m_customer 访问 Customer 属性的 Field1 属性(尽管这样编译它会在您尝试访问属性 Customer 时在运行时抛出异常,因为您有没有使用new关键字设置对对象的引用)

    在最上面的部分中,当前类不包含名为 Customer 的属性,因此编译器将在当前类之外查找对象。然后它会找到一个名为Customer。在这种情况下它不能使用Field1 属性,因为Field1 是非共享成员。如果你创建了 Field shared 这将编译。

    因此,总而言之,您要么需要共享属性通过类的实例访问属性

    要么:

    Public Class Customer
        Public Shared Field1 As String
    End Class
    
    Public Class MyOtherClass
        Sub Proc1
            Debug.Writeline(Customer.Field1)
        End SUb
    End Class
    

    或者:

    Public Class Customer
        Public Field1 As String
    End Class
    
    Public Class MyOtherClass
        Sub Proc1
            Dim myCust as New Customer
            Debug.Writeline(myCust.Field1)
        End SUb
    End Class
    

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多