作为上一个问题的后续,我问了 "ASP.Net Architecture Specific to Shared/Static functions"
我仍在努力理解在 ASP.NET 中使用共享方法的含义。
例如,让我们采用以下代码。
Public Shared Function GetCategoryByID(ByVal CategoryID As Guid) As Category
If Not CategoryID.Equals(Guid.Empty) Then
Dim res As New Category
Using sqlConn As New SqlConnection(My.Settings.ConnectionString)
sqlConn.Open()
Using dr As IDataReader = CategoryDataLayer.GetCategoryByIDQuery(sqlConn, CategoryID)
Return CType(BaseDataLayer.FillObject(res, dr), Category)
End Using
End Using
Else
Return Nothing
End If
End Function
现在我想象客户端 1 从他们与 guid {A20E625F-2333-4742-BFD9-05BE7649222D} 的 session 中连接并运行此方法 GetCategoryByID()。
现在假设进程将要执行以下行。
Using dr As IDataReader = CategoryDataLayer.GetCategoryByIDQuery(sqlConn, CategoryID)
此时客户端 2 运行相同的共享方法,但使用 guid {6D806B82-FC7F-4124-AFB9-45E2689BC9F5}。
此时 CategoryID 是否不会变为 {6D806B82-FC7F-4124-AFB9-45E2689BC9F5} 并因此干扰客户端 1,因为现在 CategoryID 已更改,这是一个共享方法?
有人可以澄清一下吗?
PS:对于本质上重复的帖子,我深表歉意,但回想起来,我觉得原始帖子中的答案不够清楚(至少对我而言)。也许我也不够具体...
最佳答案
在您的代码示例中,变量 res
是共享方法的局部变量。没有人,甚至是另一种共享方法都不能触及该变量。它会在方法的生命周期内存在,然后就消失了。 CategoryId
完全相同,它是一个不能从外部访问的局部变量。
VB 有另一个名为 Static
的概念,它与 C# 版本的 static 有很大不同,这可能会引起一些混淆。
关于asp.net - ASP.NET session 中的共享方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113395/