【发布时间】:2010-10-19 16:21:14
【问题描述】:
现在我希望以下是可能的,尽管我不完全确定它是这样的......
以下是我希望的设置(在 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())
我认为阴影可能会起作用并打印“使用 New 搜索”,但事实并非如此,有什么想法吗?我无法覆盖该属性 基类属性的不同返回类型。我想在基类中定义一组我没有的核心函数 在每个子类中覆盖。或者这没有多大意义?
感谢您的帮助!
史蒂夫
【问题讨论】:
-
编辑:B 类的 S 属性中的集合应该是“Value As SearchB”
-
@stibstibstib:您可以编辑您的问题。这些 cmets 正上方有一个小小的“编辑”链接。
-
啊,我明白了,这太小了!我现在就用它,谢谢。
标签: .net oop architecture inheritance overriding