ASP.net 中的静态方法
本文关键字:静态方法 net ASP | 更新日期: 2023-09-27 18:31:07
我目前正在构建一个 asp.net 的Web应用程序。我想创建一些静态方法作为辅助方法。这是一个好主意还是我以后会遇到问题? 没有字段或属性。只是方法,有些具有返回类型,有些没有返回类型。
静态方法是否在所有用户之间共享,例如字段和属性,或者它们是唯一的?
private static string userName;
public static string UserName
{
get
{
if (User.Identity.IsAuthenticated)
{
if (userName == "" || userName == null)
{
userName = User.Identity.Name;
}
return userName;
}
else
{
throw new ArgumentNullException("Illegal Access", "You're not login or authorize to perform such task");
}
}
}
是的,它们是共享的,但是您认为这对方法意味着什么?
静态方法在 ASP.NET 中是完全安全的。即使多个用户在多个请求中多次调用该方法,调用之间也没有共享数据。
也就是说,除非静态方法修改了静态数据,在这种情况下,如果可能的话,你应该避免,但无论如何都需要锁定。
Public Class MyPage
Inherits Page
Private Shared _iAmShared As Integer
Private Shared Sub StaticMethod()
Dim iAmNotShared As Integer = 0
_iAmShared = _iAmShared + 1
iAmNotShared = iAmNotShared + 1
End Sub
Public Sub Page_Load()
StaticMethod()
End Sub
End Class
上面的代码是错误的。_iAmShared
的增量需要互锁。如果(当)多个请求同时执行该代码,则无法保证增量将是原子的。所有用户和所有请求都有一个_iAmShared
副本。
另一方面,iAmNotShared
根本不共享。每次调用StaticMethod
都会获得自己的iAmNotShared
副本。
静态方法非常适合 ASP.net 网站中的帮助程序函数。 您可以创建具有可在整个站点中使用的静态函数的帮助程序类。 对静态方法的每次调用都是唯一的,不会共享任何内容。