설명을 돕기 위해이 예제를 작성했습니다. 보시다시피 개체 계층이 있습니다. GetFeatures() 함수를 수정하여 인스턴스화 된 객체 유형의 생성자가 추가 한 기능 만 반환하고 싶습니다. 예를 들어 BasicModel.GetFeatures (새 LuxuryModel())는 "Leather Seats"및 "Sunroof"기능 만 반환해야합니다. 내가해야한다면 반사 사용에 신경 쓰지 않아도됩니다.생성 된 하위 클래스의 유형을 기반으로 기본 클래스의 객체 컬렉션을 필터링하는 방법은 무엇입니까?
Public Class Feature
Public Sub New(ByVal model As BasicModel, ByVal description As String)
_model = model
_description = description
End Sub
Private _model As BasicModel
Public Property Model() As BasicModel
Get
Return _model
End Get
Set(ByVal value As BasicModel)
_model = value
End Set
End Property
Private _description As String
Public Property Description() As String
Get
Return _description
End Get
Set(ByVal value As String)
_description = value
End Set
End Property
End Class
Public Class BasicModel
Public Sub New()
_features = New List(Of Feature)
End Sub
Private _features As List(Of Feature)
Public ReadOnly Property Features() As List(Of Feature)
Get
Return _features
End Get
End Property
Public Shared Function GetFeatures(ByVal model As BasicModel) As List(Of Feature)
'I know this is wrong, but something like this...'
Return model.Features.FindAll(Function(f) f.Model.GetType() Is model.GetType())
End Function
End Class
Public Class SedanModel
Inherits BasicModel
Public Sub New()
MyBase.New()
Features.Add(New Feature(Me, "Fuzzy Dice"))
Features.Add(New Feature(Me, "Tree Air Freshener"))
End Sub
End Class
Public Class LuxuryModel
Inherits SedanModel
Public Sub New()
MyBase.New()
Features.Add(New Feature(Me, "Leather Seats"))
Features.Add(New Feature(Me, "Sunroof"))
End Sub
End Class
VB에서는 필터링되지 않습니다. 모든 기능이 여전히 반환됩니다. – adam0101
VB 또는 C#으로 처리되었는지 여부는 중요하지 않습니다. 이와 같이 Where 절을 사용하고 유형이 실제로 다르면 (GetType을 사용하면 두 인스턴스의 기본 유형을 비교하지 않고 각 인스턴스의 정확한 유형 만 비교할 수 있음), 필터링 된 목록을 가져와야합니다. "작동하지 않는"경우 유일한 옵션은 주어진 모델의 모든 기능이 전달하는 모델을위한 것입니다. – jrista