我对此范围有疑问。
说我有以下模块:
Public Module SampleModule
Public Function SampleFunction() As SampleStructure
Return New SampleStructure(123, 456)
End Function
Structure SampleStructure 'Do not want this accessible elsewhere in project
Public A As Integer
Public B As Integer
Sub New(ByVal A As Integer, ByVal B As Integer)
Me.A = A
Me.B = B
End Sub
End Structure
End Module
函数SampleFuncton()
是整个项目中唯一需要创建SampleStructure
新实例的代码。我希望函数可以在我的项目中的任何地方访问,但我不希望任何地方都可以访问该结构,我不希望它在其他任何地方出现在Intellisense中。
这甚至可能吗?
答案 0 :(得分:3)
如果您真正想做的只是阻止其他程序集创建SampleStructure
的实例,那么您正在寻找访问修饰符Friend
将SampleStructure
的构造函数更改为以下
Friend Sub New(ByVal A As Integer, ByVal B As Integer)
Me.A = A
Me.B = B
End Sub
如果你真的想让结构只能在你的装配体中访问,但仍然可以访问外部世界,那么你就不幸了。
答案 1 :(得分:1)
不,那是不可能的。您正在返回结构的实例,因此程序的其他部分需要具有可见性。他们如何能够与它进行交互,或者知道函数返回什么类型?
如果您没有返回实例,则可以将其设为私有。
答案 2 :(得分:0)
我想分享另一种方法。以下所有代码都应放在您的模块中。
1)创建一个interface,公开您想要访问的所有属性,方法,功能等。
Public Interface Sample
ReadOnly Property A() As Integer
ReadOnly Property B() As Integer
End Interface
2)创建私有结构并实现Sample
接口。
Private Structure InternalSample
Implements Sample
Friend Sub New(ByVal A As Integer, ByVal B As Integer)
Me.m_a = A
Me.m_b = B
End Sub
Public ReadOnly Property A() As Integer Implements Sample.A
Get
Return Me.m_a
End Get
End Property
Public ReadOnly Property B() As Integer Implements Sample.B
Get
Return Me.m_a
End Get
End Property
Friend m_a As Integer
Friend m_b As Integer
End Structure
3)在GetSample
函数中,创建InternalSample
的新实例,设置所需的值并返回对象。
Public Function GetSample() As Sample
Dim struct As New InternalSample(123, 456)
'You can still change the values before returning the object:
struct.m_a = 321
struct.m_b = 654
Return struct
End Function