Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为2个不同的类继承相同的方法_Asp.net_Vb.net_Oop_Class_Inheritance - Fatal编程技术网

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(反之亦然),因此您可能需要找到一个更高的类来传递给该方法,但想法基本相同。

创建一个它们都继承自的基类?扩展可以完成这项工作,而不是抽象。