如何在多个页面和类之间共享代码

问题描述 投票:0回答:2

如果我根据论坛的规则做错了,请原谅我,但我不知道该怎么做。这是对以下链接中提出的问题的修订。那里有一个接近答案的回应,但不完全是。通过“评论”或“编辑”来解释会太多,所以我想我会做一个新的线程。

如何在页面和类之间共享代码

无论如何(修改后的)问题。

我正在尝试在 multiple 代码隐藏页面和 multiple 使用 Page 类的对象和方法的类之间共享代码。简单的例子是使用“响应”和“会话”对象。但是,在我的真实示例中,我将使用其他 Page 对象和方法(例如 GridView、Panels 等)。

我想将与公共页面对象相关的代码保存在多个共享类中,并在多个页面和类之间共享代码。

下面的例子基于我之前的 Albert 的建议(这几乎奏效了......感谢他)。

当使用下面的方法时,我在尝试调用“Class2_Procedure”from“Class1”时收到错误“对象引用未设置为对象的实例”。

页面示例。调用“Class1_Procedure”和“Class2_Procedure”有效。调用“Class1_Procedure_Calling_Class2_Procedure”不起作用。

Partial Class _default
    Inherits System.Web.UI.Page

    Dim MyClass1 As New Class1(Me)
    Dim MyClass2 As New Class2(Me)

    Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Response.Write("Default Page > Page_Load</br>")
        MyClass1.Class1_Procedure()
        MyClass2.Class2_Procedure()
        MyClass1.Class1_Procedure_Calling_Class2_Procedure()
    End Sub
End Class

1 级。问题是当您从“Class1”调用“Class2_Procedure”时。

Public Class Class1
    Dim MyPage As Page

    Sub New(MePage As Page)
        MyPage = MePage
    End Sub

    Dim MyClass2 As New Class2(MyPage)

    Sub Class1_Procedure()
        MyPage.Response.Write("Class1 > Class1_Procedure</br>")
    End Sub

    Sub Class1_Procedure_Calling_Class2_Procedure()
        MyPage.Response.Write("Class1 > Class1_Procedure_Calling_Class2_Procedure</br>")
        MyClass2.Class2_Procedure()
    End Sub
End Class

2 级。可以从主页调用“Class2_Procedure”,但问题是当您调用“Class2_Procedure”from“Class1”时。

Public Class Class2
    Dim MyPage As Page

    Sub New(MePage As Page)
        MyPage = MePage
    End Sub

    Sub Class2_Procedure()
        MyPage.Response.Write("Class2 > Class2_Procedure</br>")
    End Sub
End Class
asp.net vb.net class code-behind
2个回答
0
投票

你的问题是这段代码:

Public Class Class1

    Dim MyPage As Page

    Sub New(MePage As Page)
        MyPage = MePage

    End Sub

    Dim MyClass2 As New Class2(MyPage)

首先,您可能希望所有全局范围的变量都在同一个地方。 (在顶部)。

第二个问题,当您创建 Class 1 的实例时,公共变量会在那个时间点被初始化。

因此,在“新”事件中,所有这些值都默认为它们的值 - 但 MyPage THEN 在新事件中设置。 (对于公共 Class2 来说,获取 mypage 似乎为时已晚。(如果你将其转换为 getter/setter,我认为它会因此起作用。

所以,如果你想在那个类中“设置”一些公共成员(变量),你应该在新事件中这样做 - 特别是在你正在创建的类依赖于其他公共值的情况下(你如果使用“new”,则无法控制此处的顺序。

对 class1 中的任何 public remember 使用 new 关键字在 99% 的情况下都很好,不是问题。

然而,当那个/那些变量(在本例中是一个类实例)也要使用其他成员/变量时? 那么你在这里没有太多控制权。

所以,强制这个问题,并确保 MyPage 是“确定”设置,然后你可以自信地创建 class2 的新实例,这也需要 Mypage 引用。

所以,你需要这样写:

Dim MyPage As Page
Dim MyClass2 As Class2

Sub New(MePage As Page)

    MyPage = MePage
    MyClass2 = New Class2(MyPage)

End Sub

Sub Class1_Procedure()
    MyPage.Response.Write("Class1 > Class1_Procedure</br>")
  .etc. .etc...

换句话说,“new”关键字看起来在 Class2 进入 mypage 之前触发了它。 (或者更好地说“可以”拿起我的页面)


0
投票

您必须首先在模块中创建代码或函数,然后以您正在使用的形式导入模块或类,通常是 windowsapplication.classname。

© www.soinside.com 2019 - 2024. All rights reserved.