Asp.net 为2个不同的类继承相同的方法
如何简化这个,类中的两个方法是相同的。Asp.net 为2个不同的类继承相同的方法,asp.net,vb.net,oop,class,inheritance,Asp.net,Vb.net,Oop,Class,Inheritance,如何简化这个,类中的两个方法是相同的。 头等舱。 Public Class Gui Inherits System.Web.UI.Page Public Sub CreateStyleLink(ByVal StyleArray() As String) Dim StrStyleLink As String For Each StyleName In StyleArray StrStyleLink = [Global].ArrStyles(StyleName)
头等舱。
Public Class Gui
Inherits System.Web.UI.Page
Public Sub CreateStyleLink(ByVal StyleArray() As String)
Dim StrStyleLink As String
For Each StyleName In StyleArray
StrStyleLink = [Global].ArrStyles(StyleName)
Dim ObjScript As New HtmlGenericControl("link")
ObjScript.Attributes.Add("rel", "Stylesheet")
ObjScript.Attributes.Add("type", "text/css")
ObjScript.Attributes.Add("href", StrStyleLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub CreateScriptLink(ByVal ScriptArray() As String)
Dim ScriptLink As String
For Each ScriptName In ScriptArray
ScriptLink = [Global].ArrScripts(ScriptName)
Dim ObjScript As New HtmlGenericControl("script")
ObjScript.Attributes.Add("type", "text/javascript")
ObjScript.Attributes.Add("src", ScriptLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub SetSelectedMenu(ByVal MenuName As String, Optional ByRef ObjPage As Page = Nothing)
Dim ObjMenu As New HtmlGenericControl
If ObjPage Is Nothing Then
ObjMenu = MyBase.Page.FindControl(MenuName)
Else
ObjMenu = ObjPage.FindControl(MenuName)
End If
ObjMenu.Attributes.Add("class", "selected")
End Sub
Public Sub ExecuteScript(ByVal ScriptName As String, Optional ByVal ScriptParam As String = "")
Dim requestSM As ScriptManager = ScriptManager.GetCurrent(Me.Page)
If Not requestSM Is Nothing And requestSM.IsInAsyncPostBack Then
ScriptManager.RegisterStartupScript(Me.Page, Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
Else
Me.Page.ClientScript.RegisterStartupScript(Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
End If
End Sub
End Class
Public Class GuiControl
Inherits System.Web.UI.UserControl
Public Sub CreateStyleLink(ByVal StyleArray() As String)
Dim StrStyleLink As String
For Each StyleName In StyleArray
StrStyleLink = [Global].ArrStyles(StyleName)
Dim ObjScript As New HtmlGenericControl("link")
ObjScript.Attributes.Add("rel", "Stylesheet")
ObjScript.Attributes.Add("type", "text/css")
ObjScript.Attributes.Add("href", StrStyleLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub CreateScriptLink(ByVal ScriptArray() As String)
Dim ScriptLink As String
For Each ScriptName In ScriptArray
ScriptLink = [Global].ArrScripts(ScriptName)
Dim ObjScript As New HtmlGenericControl("script")
ObjScript.Attributes.Add("type", "text/javascript")
ObjScript.Attributes.Add("src", ScriptLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub ExecuteScript(ByVal ScriptName As String, Optional ByVal ScriptParam As String = "")
Dim requestSM As ScriptManager = ScriptManager.GetCurrent(Me.Page)
If Not requestSM Is Nothing And requestSM.IsInAsyncPostBack Then
ScriptManager.RegisterStartupScript(Me.Page, Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
Else
Me.Page.ClientScript.RegisterStartupScript(Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
End If
End Sub
End Class
二等舱。
Public Class Gui
Inherits System.Web.UI.Page
Public Sub CreateStyleLink(ByVal StyleArray() As String)
Dim StrStyleLink As String
For Each StyleName In StyleArray
StrStyleLink = [Global].ArrStyles(StyleName)
Dim ObjScript As New HtmlGenericControl("link")
ObjScript.Attributes.Add("rel", "Stylesheet")
ObjScript.Attributes.Add("type", "text/css")
ObjScript.Attributes.Add("href", StrStyleLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub CreateScriptLink(ByVal ScriptArray() As String)
Dim ScriptLink As String
For Each ScriptName In ScriptArray
ScriptLink = [Global].ArrScripts(ScriptName)
Dim ObjScript As New HtmlGenericControl("script")
ObjScript.Attributes.Add("type", "text/javascript")
ObjScript.Attributes.Add("src", ScriptLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub SetSelectedMenu(ByVal MenuName As String, Optional ByRef ObjPage As Page = Nothing)
Dim ObjMenu As New HtmlGenericControl
If ObjPage Is Nothing Then
ObjMenu = MyBase.Page.FindControl(MenuName)
Else
ObjMenu = ObjPage.FindControl(MenuName)
End If
ObjMenu.Attributes.Add("class", "selected")
End Sub
Public Sub ExecuteScript(ByVal ScriptName As String, Optional ByVal ScriptParam As String = "")
Dim requestSM As ScriptManager = ScriptManager.GetCurrent(Me.Page)
If Not requestSM Is Nothing And requestSM.IsInAsyncPostBack Then
ScriptManager.RegisterStartupScript(Me.Page, Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
Else
Me.Page.ClientScript.RegisterStartupScript(Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
End If
End Sub
End Class
Public Class GuiControl
Inherits System.Web.UI.UserControl
Public Sub CreateStyleLink(ByVal StyleArray() As String)
Dim StrStyleLink As String
For Each StyleName In StyleArray
StrStyleLink = [Global].ArrStyles(StyleName)
Dim ObjScript As New HtmlGenericControl("link")
ObjScript.Attributes.Add("rel", "Stylesheet")
ObjScript.Attributes.Add("type", "text/css")
ObjScript.Attributes.Add("href", StrStyleLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub CreateScriptLink(ByVal ScriptArray() As String)
Dim ScriptLink As String
For Each ScriptName In ScriptArray
ScriptLink = [Global].ArrScripts(ScriptName)
Dim ObjScript As New HtmlGenericControl("script")
ObjScript.Attributes.Add("type", "text/javascript")
ObjScript.Attributes.Add("src", ScriptLink)
Me.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub ExecuteScript(ByVal ScriptName As String, Optional ByVal ScriptParam As String = "")
Dim requestSM As ScriptManager = ScriptManager.GetCurrent(Me.Page)
If Not requestSM Is Nothing And requestSM.IsInAsyncPostBack Then
ScriptManager.RegisterStartupScript(Me.Page, Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
Else
Me.Page.ClientScript.RegisterStartupScript(Me.GetType, ScriptName, ScriptName + "('" + ScriptParam + "');", True)
End If
End Sub
End Class
创建一个基类(可能是抽象类),用于定义方法和
或者,您可以使用。我可以将这些创建为实用程序类的简单静态成员,或者如果您愿意,可以将静态成员扩展为
UserControl的扩展方法
下面是一个实用程序类的快速示例,未经测试,VB不是我使用的大多数语言,请原谅任何小的语法疏忽
Class NotInheritable UserControlHelper
Public Sub CreateStyleLink(ByVal control as UserControl, _
ByVal StyleArray() As String)
Dim StrStyleLink As String
For Each StyleName In StyleArray
StrStyleLink = [Global].ArrStyles(StyleName)
Dim ObjScript As New HtmlGenericControl("link")
ObjScript.Attributes.Add("rel", "Stylesheet")
ObjScript.Attributes.Add("type", "text/css")
ObjScript.Attributes.Add("href", StrStyleLink)
control.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Public Sub CreateScriptLink(ByVal control as UserControl, _
ByVal ScriptArray() As String)
Dim ScriptLink As String
For Each ScriptName In ScriptArray
ScriptLink = [Global].ArrScripts(ScriptName)
Dim ObjScript As New HtmlGenericControl("script")
ObjScript.Attributes.Add("type", "text/javascript")
ObjScript.Attributes.Add("src", ScriptLink)
control.Page.Header.Controls.Add(ObjScript)
Next
End Sub
Private Sub New()
End Sub
End Class
然后,可以在任何有UserControl作为第一个参数传入的地方使用它。我不确定是否可以在VB.NET中定义扩展方法,我认为2010支持这一点,但我可能错了。创建一个基类只是为了继承一个常用方法通常不是一个好办法。继承意味着创建一种更具体的对象类型,而不仅仅是为了共享。在本例中,一个是页面,另一个是用户控件,这可能不定义层次关系
因此,实用程序或帮助程序类可能是要走的路线,基本上如Chris所述。我要做的一个补充是共享这两个方法,这样就不需要一个实例来使用
通过使用普通实例方法,您必须遵循以下路线:
Dim help As New UserControlHelper
help.CreateScriptLink(Me)
与共享方法相反,可以按如下方式执行:
UserControlHelper.CreateScriptLink(Me)
我不记得页面是否继承自UserControl(反之亦然),因此您可能需要找到一个更高的类来传递给该方法,但想法基本相同。创建一个它们都继承自的基类?扩展可以完成这项工作,而不是抽象。