类'ProductRepository'必须为接口'IProductRepository'

时间:2018-02-08 06:42:25

标签: .net vb.net

我试图将https://docs.microsoft.com/en-us/aspnet/web-api/overview/older-versions/creating-a-web-api-that-supports-crud-operations中的C#代码转换为VB .Net。

我已经创建了如下的接口IProductRepository,

Namespace ProductStore.Models

    Interface IProductRepository

        Function GetAll() As IEnumerable(Of Product)

        Function [Get](ByVal id As Integer) As Product

        Function Add(ByVal item As Product) As Product

        Sub Remove(ByVal id As Integer)

        Function Update(ByVal item As Product) As Boolean

    End Interface
End Namespace

然后创建ProductRepository类,如下所示,

Namespace ProductStore.Models

    Public Class ProductRepository
        Inherits IProductRepository

        Private products As List(Of Product) = New List(Of Product)()

        Private _nextId As Integer = 1

        Public Sub New()
            Add(New Product With {.Name = "Tomato soup", .Category = "Groceries", .Price = 1.39D})
            Add(New Product With {.Name = "Yo-yo", .Category = "Toys", .Price = 3.75D})
            Add(New Product With {.Name = "Hammer", .Category = "Hardware", .Price = 16.99D})
        End Sub

        Public Function GetAll() As IEnumerable(Of Product)
            Return products
        End Function

        Public Function [Get](ByVal id As Integer) As Product
            Return products.Find(Function(p) p.Id = id)
        End Function

        Public Function Add(ByVal item As Product) As Product
            If item Is Nothing Then
                Throw New ArgumentNullException("item")
            End If

            item.Id = Math.Min(System.Threading.Interlocked.Increment(_nextId), _nextId - 1)
            products.Add(item)
            Return item
        End Function

        Public Sub Remove(ByVal id As Integer)
            products.RemoveAll(Function(p) p.Id = id)
        End Sub

        Public Function Update(ByVal item As Product) As Boolean
            If item Is Nothing Then
                Throw New ArgumentNullException("item")
            End If

            Dim index As Integer = products.FindIndex(Function(p) p.Id = item.Id)
            If index = -1 Then
                Return False
            End If

            products.RemoveAt(index)
            products.Add(item)
            Return True
        End Function
    End Class
End Namespace

但我收到的行继承IProductRepository的错误为“类只能从其他类继承。”。当我将Inherits更改为Implements时,如下所示  实现IProductRepository

我收到以下错误,

  

类'ProductRepository'必须实现'Function GetAll()As   System.Collections.Generic.IEnumerable(Of Product)'用于接口   'IProductRepository'

和IProductRepository中的其他接口相同。你能帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的班级 ProductRepository 应该实现 IProductRepository 这样的接口,

Public Class ProductRepository
        Implements IProductRepository

您必须明确使用 Implements 关键字来实现ProductRepository类中的接口方法

Public Function GetAll() As IEnumerable(Of Product) Implements IProductRepository.GetAll
            Return products
End Function