繁体   English   中英

ASP.net中的静态方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM