从其他类中的一个类共享类型

时间:2013-08-28 05:19:14

标签: vb.net class cookies httpwebrequest shared

我正在尝试创建一个名为登录类的类,该类登录到一个网站并将cookie保存在cookiecontainer中。然后我想在其他课程中使用cookiecontainer中保存的cookie。我了解如何发送请求并将Cookie保存在cookiecontainer中,但我不知道如何在另一个类中使用cookiecontainer。我是否将cookiecontainer设为公共共享类型?然后,我如何从该类的特定实例访问cookie?

CODE:

我正在使用http://howtostartprogramming.com/vb-net/vb-net-tutorial-52-httpwebrequest-cookiecontainer/中的代码。

Imports System.Net
Imports System.Text
Imports System.IO

Public Class Login

    Public shared logincookie As CookieContainer

    Private Sub Login()

        Dim postData As String = "poststring"
        Dim tempCookies As New CookieContainer
        Dim encoding As New UTF8Encoding
        Dim byteData As Byte() = encoding.GetBytes(postData)

        Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create("website"), HttpWebRequest)
        postReq.Method = "POST"
        postReq.KeepAlive = True
        postReq.CookieContainer = tempCookies
        postReq.ContentLength = byteData.Length

        Dim postreqstream As Stream = postReq.GetRequestStream()
        postreqstream.Write(byteData, 0, byteData.Length)
        postreqstream.Close()
        Dim postresponse As HttpWebResponse

        postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
        tempCookies.Add(postresponse.Cookies)
        logincookie = tempCookies

    End Sub

End Class

1 个答案:

答案 0 :(得分:1)

向项目添加模块,将其公开。

在其中创建公共属性。

Public Module Globals
    Public Property GlobalCookies As CookieContainer
End Module

这将允许您与同一解决方案中的其他类共享。

你应该小心使用全局变量,因为它们会增加复杂性并导致很难找到的错误。

是的,这在功能上等同于类上的共享类型。由于VB没有共享类,但我倾向于使用模块,因为它们实际上是共享类。你可以拥有一个共享所有属性的类,这几乎是一样的,但是你必须记住不要在该类上放置非共享属性。

我不建议在实例化的类上放置共享状态,因为状态超出了类的范围而且不是OO。当然,共享功能是完全可以接受的,因为它允许您在一个物理位置对相似的行为进行分组。