代码之家  ›  专栏  ›  技术社区  ›  Chris

.NET继承与集合“未设置对象引用…”错误

  •  0
  • Chris  · 技术社区  · 15 年前

    我正在构造一个对象集合,并且需要在基类上使用继承——我已经用各种方法尝试了好几个小时,但无论如何都无法实现——错误总是“对象引用未设置为对象实例”

    下面示例中的想法是实例化一个对象,当我试图访问 oDemo.Students(0).Name

    下面是用于实例化和访问类(从ASP.NET)的代码。

    Dim oDemo As New MyDemo.Students
    lblTest.Text = oDemo.Student(0).Name
    

    下面是类库中的示例代码:

    Public Class Students
        Private p_Students As System.Collections.Generic.List(Of Test)
        ReadOnly Property Student() As System.Collections.Generic.List(Of Test)
            Get
                Dim alTestNames As New ArrayList()
                alTestNames.Add("John")
                alTestNames.Add("Brian")
                alTestNames.Add("Scott")
                For iLoop As Integer = 0 To alTestNames.Count - 1
                    p_Students.Add(New Test(alTestNames(iLoop).ToString))
                Next
                Return p_Students
            End Get
        End Property
    End Class
    
    Public MustInherit Class TestBase
        Private p_Name As String
        ReadOnly Property Name() As String
            Get
                Return p_Name
            End Get
        End Property
        Sub New(ByRef sName As String)
            p_Name = sName
        End Sub
    End Class
    
    Public Class Test
        Inherits TestBase
        Sub New(ByRef sName As String)
            MyBase.New(sName)
        End Sub
    End Class
    

    我不确定我是否在某种程度上完全忽略了这一点-任何帮助都会得到感激。如果需要更多信息/背景,请告知。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Hans Passant    15 年前

    您从未初始化过p}u Students字段,该字段为空,并导致异常。修复:

    Private p_Students As New System.Collections.Generic.List(Of Test)
    

    注意 新的

    Public Class Students
        Private p_Students As System.Collections.Generic.List(Of Test)
        Public Sub New()
            p_Students = New System.Collections.Generic.List(Of Test)
            p_Students.Add(New Test("John"))
            '' etc..
        End Sub
        ReadOnly Property Student() As System.Collections.Generic.IList(Of Test)
            Get
                Return p_Students
            End Get
        End Property
    End Class
    
        2
  •  1
  •   TroutKing    15 年前

    你收到错误信息是因为你从未初始化 p_Students 在课堂上 Students Student() 财产。您可能需要初始化数组并在构造函数中只添加一次测试名称。

    推荐文章