2010-01-26 3 views
0

В asp.net 2.0 У меня есть несколько «выпадающих списков», определяемых с помощью дженериков (примеры цвета глаз, цвета волос и т. Д.). Поля все типичны; id, text и т. д. Все они определены как их собственные классы, которые должны реализовать интерфейс, созданный мной ILookup. Однако, когда я пытаюсь вернуть список <> этого класса с помощью:Какую ошибку я делаю при создании ограничения в дженериках?

ddlEyeColor.DataSource = luMgt.GetLookUpItemList(Of EyeColor)() 

, который вызывает BC слой:

Public Function GetLookUpItemList(Of t As {ILookup, New})() As List(Of t) 
    Dim luMgt As New LookupMgt 
    Return luMgt.GetLookUpItemList(Of t)() 
End Function 

который вызывает слой DBC, который, в части есть ....

Public Function GetLookUpItemList(Of t As {ILookup, New})() As List(Of t) 

    Dim lstGenericList As New List(Of t) 
    'rest of code to populate the list here 
    end function 

сообщение об ошибке утверждает, что EyeColor не реализует ILookup.

Ошибка 21 Аргумент типа 'EyeColor' не наследует и не реализует тип ограничения 'ILookup'.

Но вот начало класса EyeColor ....

Public Class EyeColor 
Implements ILookup 

Вот полный интерфейс ....

Открытый интерфейс ILookup

Property ID() As Int32 
Property Text() As String 
Property Description() As String 
Property Status() As Status 
Property OrderID() As Int32 
ReadOnly Property LookUpType() As LookUpType 

End Interface

И здесь, в классе EyeColor, я реализую свойства интерфайла ace

Public Overrides Property Description() As String Implements ILookup.Description 
    Get 
     Return MyBase.Description 
    End Get 
    Set(ByVal value As String) 
     MyBase.Description = value 
    End Set 
End Property 

Public Overrides Property ID() As Integer Implements ILookup.ID 
    Get 
     Return MyBase.ID 
    End Get 
    Set(ByVal value As Integer) 
     MyBase.ID = value 
    End Set 
End Property 

Public Overrides Property OrderID() As Integer Implements ILookup.OrderID 
    Get 
     Return MyBase.OrderID 
    End Get 
    Set(ByVal value As Integer) 
     MyBase.OrderID = value 
    End Set 
End Property 

Public Overrides Property Status() As Status Implements ILookup.Status 
    Get 
     Return MyBase.Status 
    End Get 
    Set(ByVal value As Status) 
     MyBase.Status = value 
    End Set 
End Property 

Public Property EyeColor() As String Implements ILookup.Text 
    Get 
     Return _eyeColor 
    End Get 
    Set(ByVal value As String) 
     _eyeColor = value 
    End Set 
End Property 

Public ReadOnly Property LookUpType() As LookUpType Implements ILookup.LookUpType 
    Get 
     Return BE.LookUpType.EyeColor 
    End Get 
End Property 
+2

Есть ли какие-нибудь ошибки в классе EyeColor? Если интерфейс еще не полностью реализован, по крайней мере, с помощью «NotImplementedExceptions» ошибки компилятора будут «каскадом» таким образом. – Jay

+0

Почему эти свойства объявлены переопределениями? Здесь где-то есть базовый класс? –

ответ

0

Я поддержал комментарий Джей. Он абсолютно прав. Просто добавление приложений ILookup в определение класса фактически не реализует интерфейс.

Вам необходимо создать фактические методы, которые диктует интерфейс.

0

Я думаю, что нужно изменить метод подписи:

Public Function GetLookUpItemList(Of T As {ILookup, New})() As List(Of ILookup) 
Смежные вопросы