1

IDataReaderを実装するクラスがあり、必要な関数が記述されていますが、次のようなエラーメッセージが表示されます。

クラス'CSVDataReader'は、インターフェイス'System.Data.IDataRecord'に対して'Function GetBoolean(i As Integer)AsBoolean'を実装する必要があります。

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
4

1 に答える 1

1

すべてのメソッドとプロパティを実装する必要があります。

インターフェイスはコントラクトです。オブジェクトが、インターフェイスにリストされているサービスを提供できると言う場合、それらすべてを提供する必要があります。インターフェイスは基本クラスではありません。何かを実装しない場合に頼りになる「テンプレート」コードはありません。

興味のないメソッド/プロパティにコードを入れなくてもかまいません (Throw New NotImplementedException意図していなかったメソッドをうっかり呼び出してしまったことがわかるように、通常は入れます)。しかし、スタブはそこになければなりません。

于 2012-11-08T19:43:15.073 に答える