【问题标题】:How to use private Declarations in Shared Function in a Class?如何在类的共享函数中使用私有声明?
【发布时间】:2012-12-04 07:16:27
【问题描述】:

我试图在一个类中使用一个私有声明的变量/对象,来自同一个类中的一个共享函数。

我的主要目标是能够访问类之外的共享函数,但不能访问变量,因为它们是私有的。我不认为将所有变量/对象声明设置为“共享”是一个优雅的解决方案。

为了更好的检查,这里有一个 sn-p:

Module main
    Sub Main()
        MsgBox(xTest.xMain)
    End Sub
End Module

Class xTest
    Private WC As New Net.WebClient()
    Shared Function xMain() As String
        Return WC.DownloadString("http://example.com")
    End Function
End Class

当然,我该怎么做呢?

【问题讨论】:

    标签: .net vb.net class shared private-members


    【解决方案1】:

    我怀疑您对Shared 的含义感到困惑。这与Private/Public/etc 正交。

    Shared 表示“特定于类型,而不是类型的任何实例”。您的Shared 函数不能使用WC,因为它没有xTestinstance 来查找特定的WC 变量。想象一下它是一个name 变量——这就像问一个Person 类“你叫什么名字?”相反,每个人 Person instance 都有一个名称。

    您应该仔细考虑每个成员(无论是函数还是变量)在逻辑上是否为Shared

    有关更多详细信息,请参阅MSDN page on shared members - 尽管我不喜欢那里使用的描述。 “......由类的所有实例共享......”听起来首先必须有 an 实例。没有 - 只是成员与类型本身相关联。即使没有创建类的实例,也可以使用共享变量。

    (顺便说一句,我可能一开始就不会将WebClient 作为一个字段。WebClient 旨在被创建、使用、然后丢弃。我还建议更改你的名字遵循 .NET 命名约定。)

    【讨论】:

    • 谢谢,看了你的回复才知道。
    【解决方案2】:

    需要共享变量才能从共享函数访问。顺便说一句,对于您正在尝试做的事情,我认为共享方法是不明智的。

    【讨论】:

    • 你有什么建议。请详细说明。谢谢。
    猜你喜欢
    • 2016-06-06
    • 2015-12-10
    • 1970-01-01
    • 2021-03-16
    • 2018-10-14
    • 2014-08-25
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多