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 中的静态方法

是的,它们是共享的,但是您认为这对方法意味着什么?

静态方法在 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 网站中的帮助程序函数。 您可以创建具有可在整个站点中使用的静态函数的帮助程序类。 对静态方法的每次调用都是唯一的,不会共享任何内容。