现在我希望以下是可能的,虽然我不完全确定它是这样的...
下面是我希望可能的设置(在VB.net中,随时可以在C#中回答,我应该能够解决这个问题):
Public Class A
Private _name As String
Private _s As SearchA
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal Value As String)
_name = Value
End Set
End Property
Public Property S() As SearchA
Get
Return _s
End Get
Set(ByVal Value As SearchA)
_s = Value
End Set
End Property
Public Sub New(ByVal name As String)
_name = name
_s = New SearchA()
End Sub
Public Function GetSearch() As String
Return _s.Search
End Sub
End Class
和
Public Class SearchA
Private _search As String
Public Property Search () As String
Get
Return _search
End Get
Set(ByVal Value As String
_search = Value
End Set
End Property
Public Sub New()
_search = "Search using Base"
End Sub
End Class
和
Public Class B
Inherits A
Private Shadows _s As SearchB
Public Shadows Property S() As SearchB
Get
Return _s
End Get
Set(ByVal Value As SearchB)
_s = Value
End Set
End Property
Public Sub New(ByVal name As String)
Mybase.New(name)
_s = New SearchB()
End Sub
End Class
最后
Public Class SearchB
Inherits SearchA
Private _superSearch As String
Public Property SuperSearch () As String
Get
Return _superSearch
End Get
Set(ByVal Value As String
_superSearch = Value
End Set
End Property
Public Sub New()
Mybase.New()
_search = "Search using New"
_superSearch = "With more options..."
End Sub
End Class
这是用法:
Dim oB As New B("hello")
Response.Write(oB.GetSearch())
我认为阴影可能起作用并打印“使用新搜索”,但它没有,任何想法?我无法覆盖属性 基类属性的不同返回类型。我想在基类中定义一组我没有的核心函数 在每个子类中覆盖。或者这没有多大意义?
感谢您的帮助!
史蒂夫
答案 0 :(得分:0)
我认为你想要做的是定义一个由SearchA和SearchB继承的抽象搜索类。使_s成为受保护的搜索类型,将其作为公共属性公开,并将A类和SearchB中的SearchA分配给它。然后,GetSearch()将从A返回SearchA,从B返回SearchB,尽管它们都将被输入作为搜索。
答案 1 :(得分:0)
我认为这是因为GetSearch是在A中实现的,所以它使用A中的字段。
通常,如果你在遗留代码中使用Shadows,你应该问问自己你做错了什么。
就像在这里一样,这种设计有气味。来自A的继承B和来自SearchA的SearchB的两种情况都是滥用继承。它继承了一只来自狗的猫,因为它“大部分都是一样的”。正如Jamie Ide已经说过:你应该使用抽象基类。
考虑: