我有一个我需要索引的类列表(基于来自另一个类的元素)。但是,我不确定如何使枚举器可以访问其他类,主窗体和嵌套类。这是我的代码:
班级:
Public Class Episodes
Inherits Form1
Public Shared _Episodes As List(Of Events)
Public Shared Property Episodes() As List(Of Events)
Get
Return _Episodes
End Get
Set(value As List(Of Events))
_Episodes = value
End Set
End Property
Public Sub New(ByVal Episodes As List(Of Events))
_Episodes = New List(Of Events)
For Each Events As Events In S
For i As Integer = 0 To S.Count - 2
_Episodes.Add(S(i))
_Episodes.Add(S(i + 1))
Next
Next
End Sub
' ...
End Class
可枚举:
Public Shared j As Integer = Enumerable.Count(Episodes, Function(Events) Events.EventTime)
有没有办法做到这一点,以便代码的任何部分都可以调用Enumerable,即访问Episodes(S(i))
或Episodes(S(i+1))
?
答案 0 :(得分:0)
现在看起来有点混乱。每次创建Episodes
个对象时,它的构造函数(Sub New
)会用新列表覆盖共享的_Episodes
字段,然后从S
重新填充它(无论是什么)。 _Episodes
列表已通过名为Shared
的{{1}}属性进行全局共享,但在第一次创建Episodes
对象之前,列表实际上并未填充。然后,正如我之前所说的那样,每次连续创建Episodes
对象时,它都会被覆盖并重新填充。
因此,对您的问题的简单回答是,您已经可以全局访问它,但它可能无法按照您打算工作的方式工作。因为它是类的共享属性,所以当你从其他类中使用它时,你必须在它前面添加类名,如下所示:
Episode
如果您不想指定类名,可以将列表放在模块中而不是类中。例如,如果您创建了这样的模块:
Episodes.Episodes(S(i))
然后你可以在项目的任何地方使用它,而不用模块名称作为前缀,例如:
Module Module1
Public Property Episodes As List(Of Events)
End Module
但是,我不会真的推荐任何这样的,因为我的设计中有三个问题:
Episodes(S(i))
对象时,您都在重新创建列表Episodes
对象之前,该属性将为Nothing
(网上有很多解释为什么最好避免全球状态和单身人士,所以我不会在这里重复一遍。如果你不知道为什么全局状态不好,我建议做一些研究关于主题)