Asp.net 如何在不重新键入所有方法的情况下实现IDataReader?

Asp.net 如何在不重新键入所有方法的情况下实现IDataReader?,asp.net,vb.net,class,implements,Asp.net,Vb.net,Class,Implements,我有一个实现IDataReader的类,并且编写了所需的函数,但是我收到一条错误消息 类“CSVDataReader”必须为接口“System.Data.IDataRecord”实现“函数GetBoolean(i为整数)为Boolean” IDataReader具有许多函数和属性。如何在不重写所有函数的情况下实现这些函数 这是我的班级 Public Class CSVDataReader Implements IDataReader Private stream As S

我有一个实现IDataReader的类,并且编写了所需的函数,但是我收到一条错误消息

类“CSVDataReader”必须为接口“System.Data.IDataRecord”实现“函数GetBoolean(i为整数)为Boolean”

IDataReader具有许多函数和属性。如何在不重写所有函数的情况下实现这些函数

这是我的班级

    Public Class CSVDataReader
    Implements IDataReader
    Private stream As StreamReader
    Private columnsByName As New Dictionary(Of String, Integer)()
    Private columnsByOrdinal As New Dictionary(Of Integer, String)()
    Private currentRow As String()
    Private _isClosed As Boolean = True

    Public Sub New(fileName As String)
        If Not File.Exists(fileName) Then
            Throw New Exception("File [" & fileName & "] does not exist.")
        End If

        Me.stream = New StreamReader(fileName)

        Dim headers As String() = stream.ReadLine().Split(",")
        For i As Integer = 0 To headers.Length - 1
            columnsByName.Add(headers(i), i)
            columnsByOrdinal.Add(i, headers(i))
        Next

        _isClosed = False
    End Sub

    Public Sub Close()
        If stream IsNot Nothing Then
            stream.Close()
        End If
        _isClosed = True
    End Sub

    Public ReadOnly Property FieldCount() As Integer
        Get
            Return columnsByName.Count
        End Get
    End Property

    ''' <summary>
    ''' This is the main function that does the work - it reads in the next line of data and parses the values into ordinals.
    ''' </summary>
    ''' <returns>A value indicating whether the EOF was reached or not.</returns>
    Public Function Read() As Boolean
        If stream Is Nothing Then
            Return False
        End If
        If stream.EndOfStream Then
            Return False
        End If

        currentRow = stream.ReadLine().Split(",")
        Return True
    End Function

    Public Function GetValue(i As Integer) As Object
        Return currentRow(i)
    End Function

    Public Function GetName(i As Integer) As String
        Return columnsByOrdinal(i)
    End Function

    Public Function GetOrdinal(name As String) As Integer
        Return columnsByName(name)
    End Function

    Public Function GetOrdinal(name As String) As Integer
        Return columnsByName(name)
    End Function
End Class
公共类CSVDataReader
电子阅读器
作为StreamReader的私有流
Private columnsByName作为新字典(字符串,整数)()
Private ColumnsByDinal作为新字典(整型,字符串)()
私有currentRow作为字符串()
Private _关闭为布尔值=True
Public Sub New(文件名为字符串)
如果文件不存在(文件名),则
抛出新异常(“文件[”&fileName&“]不存在。”)
如果结束
Me.stream=新的StreamReader(文件名)
将标题设置为字符串()=stream.ReadLine().Split(“,”)
对于i,整数=0到标头。长度-1
columnsByName.Add(标题(i),i)
添加(i,标题(i))
下一个
_isClosed=False
端接头
公开分户结算()
如果流不是什么,那么
stream.Close()
如果结束
_isClosed=True
端接头
公共只读属性FieldCount()为整数
得到
返回columnsByName.Count
结束
端属性
''' 
''这是做这项工作的主要函数-它读入下一行数据并将值解析为序号。
''' 
''指示是否达到EOF的值。
公共函数Read()为布尔值
如果流什么都不是,那么
返回错误
如果结束
如果stream.EndOfStream那么
返回错误
如果结束
currentRow=stream.ReadLine().Split(“,”)
返回真值
端函数
作为对象的公共函数GetValue(i为整数)
返回当前行(i)
端函数
公共函数GetName(i为整数)为字符串
返回列按对角线(i)
端函数
公共函数GetOrdinal(名称为字符串)为整数
返回columnsByName(名称)
端函数
公共函数GetOrdinal(名称为字符串)为整数
返回columnsByName(名称)
端函数
末级

您必须实现所有方法和属性

接口是一个契约——如果一个对象说它可以提供接口上列出的服务,那么它必须提供所有这些服务。接口不是基类——如果不实现某些东西,就没有可依赖的“模板”代码


不在您不感兴趣的方法/属性中放入任何代码是可以的(我通常会放入
抛出新的NotImplementedException
,这样我就知道何时无意中调用了一个我不打算调用的方法)。但是存根必须存在。

您必须实现所有的方法和属性

接口是一个契约——如果一个对象说它可以提供接口上列出的服务,那么它必须提供所有这些服务。接口不是基类——如果不实现某些东西,就没有可依赖的“模板”代码


不在您不感兴趣的方法/属性中放入任何代码是可以的(我通常会放入
抛出新的NotImplementedException
,这样我就知道何时无意中调用了一个我不打算调用的方法)。但是存根必须在那里。

当您在键入
Implements IDataReader
后按
Enter
键时,Visual Studio应该用存根填充您的类。如果没有,请尝试删除该行并重新键入,确保按该行末尾的
Enter
键。如果键入该行,然后单击文件中的其他位置,Visual Studio将不会自动填充您的类。因此,我这样做了,并且许多用于返回值的自动生成函数没有返回语句。你有什么建议?虽然VS显示它是一个错误,但当我上传它时,它并没有抛出错误。问题解决了。如果您输入我提到的
Throw
语句,VS将停止告诉您该方法不返回值。或者,您可以输入
不返回任何内容
。(在Visual Basic中,是类型的默认值,因此无论该方法返回的是引用类型(如
Object
)还是值类型(如
Integer
),当键入
实现IDat后按
Enter
键时,Visual Studio都应使用存根填充类aReader
。如果没有,请尝试删除该行并重新键入,确保按该行末尾的
Enter
键。如果键入该行,然后单击文件中的其他位置,Visual Studio将不会自动填充类。因此,我这样做了,并且许多自动生成的用于返回值的函数不会自动填充有一个返回语句。你有什么建议?虽然VS显示它是一个错误,但当我上传它时,它没有抛出错误。问题解决了。如果你输入我提到的
throw
语句,VS将停止告诉你该方法不返回值。或者,你可以输入
不返回任何值。(在Visual Basic中,是类型的默认值,因此无论方法返回引用类型(如
对象
)还是值类型(如
整型
),都可以使用
不返回任何内容
)。在VS中,您应该能够右键单击代码中的接口名称并选择“实现接口”。这将为您删除所有接口方法。适用于C#,我假设VB也支持它。遗憾的是,VB没有太多这样的重构优点(至少在我上次查看时是这样,可能更高版本更好)。在VS中,您应该能够右键单击接口名称