[英]Static Method in ASP.net
我目前正在构建一个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
不共享iAmNotShared
。 每次对StaticMethod
调用都会获得其自己的iAmNotShared
副本。
静态方法非常适合ASP.net网站中的辅助函数。 您可以使用静态函数创建一个可以在整个站点中使用的帮助程序类。 每次对静态方法的调用都是唯一的,并且不共享任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.