Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VB.NET中使名称引用属性而不是类?_.net_Vb.net_Class_Properties - Fatal编程技术网

如何在VB.NET中使名称引用属性而不是类?

如何在VB.NET中使名称引用属性而不是类?,.net,vb.net,class,properties,.net,Vb.net,Class,Properties,比较以下几组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 C

比较以下几组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
可以做些什么来编译顶级段


你能帮忙吗

在第二组代码中,Customer指的是当前类的Customer属性(与
Me.Customer
)相同。然后,您可以通过实例访问
客户属性的
字段1
属性(尽管这会编译,但当您尝试访问属性Customer时,它会在运行时引发异常,因为您没有使用
new
关键字设置对对象的引用)

在顶段中,当前类不包含名为Customer的属性,因此编译器将查找当前类之外的对象。然后,它将查找名为
Customer
的类。在这种情况下,它不能使用
Field1
属性,因为
Field1
是非共享成员。如果您创建了
Field
共享
这将编译

因此,要得出结论,您要么需要使属性共享,要么需要通过类的实例访问属性

要么:

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