Asp.net中的另一个OOP问题
现在,我希望以下是可能的,虽然我不完全确定它是这样的,就这样吧 下面是我希望能够实现的设置(在VB.net中,请随意用C#回答,我应该能够解决): 及 及 最后Asp.net中的另一个OOP问题,.net,oop,architecture,inheritance,overriding,.net,Oop,Architecture,Inheritance,Overriding,现在,我希望以下是可能的,虽然我不完全确定它是这样的,就这样吧 下面是我希望能够实现的设置(在VB.net中,请随意用C#回答,我应该能够解决): 及 及 最后 Public Class SearchB Inherits SearchA Private _superSearch As String Public Property SuperSearch () As String Get Return _superSearch
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())
我认为阴影可能会工作并打印“使用新搜索”,但它不会,有什么想法吗?我无法覆盖,因为该属性已被覆盖
基类属性的不同返回类型。我想在基类中定义一组我没有的核心函数
在每个子类中重写。或者这没有多大意义
谢谢你的帮助
Steve我认为您要做的是定义一个由SearchA和SearchB继承的抽象搜索类。将“U”设为受保护的搜索类型,将其公开为公共属性,并在类a中将SearchA分配给它,在类B中将SearchB分配给它。然后GetSearch()将从a返回SearchA,从B返回SearchB,尽管它们都将被类型化为搜索。我认为这是因为GetSearch是在a中实现的,所以它使用a中的字段 通常,如果您在遗留代码中没有使用阴影,您应该问问自己哪里做错了 因为它在这里,这个设计有一种气味。从A继承B和从SearchA继承SearchB都是一种滥用继承。这有点像是从狗那里继承了一只猫,因为它“基本上是一样的”。正如JamieIDE已经说过的:应该使用抽象基类 考虑:
- 使用抽象基类并继承a和B
- 使用由SearchA和SearchB实现的接口ISearch 基类的引用。这是一种经典的战略模式
- 如果需要对SearchA或SearchB的类型化引用,请使用泛型。你 可能不需要它
- 用工厂把东西组装起来
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())