静态方法和非静态方法的区别 ,Google一搜一大堆

解决方案 »

  1.   


    第一种应该这样写:
    public static class CommonRequest//通用
    {
        public static int GetUserLoginTimes(User user)//static 
        {
            return User.Type == "admin"?ServiceFactory.GetFactory().GetUserService().GetUserLoginTimes(User.userId):0;
        }
    }
    这样外部调用时,可以直接调用。第二种调用方法,外边调用时要实例化才可以调用
      

  2.   

    静态方法调用一次后常驻内存,new实例化的类每次调用都要先实例化,调用结束后不再占用内存
      

  3.   

    static变量或函数第一次加载的时候会一直在内存当中
      

  4.   

    就是经常要用到这静态个方法,值不会受影响吧。
    还有个问题,当通用的方法特别特别的多,基本每次请求都用到,而每天有百多万次的请求,在这种情况下用静态的好,还是实例化的好呢?当然是new的好 
      

  5.   

    就是经常要用到这静态个方法,值不会受影响吧。
    还有个问题,当通用的方法特别特别的多,基本每次请求都用到,而每天有百多万次的请求,在这种情况下用静态的好,还是实例化的好呢?当然是new的好 如果把很多通用的方法写到一个类comm,
    页面A处理过程中,需要用到类B于是就实例化B,然后B要实例化C
    A和B和C都需要用到通用方法comm,考虑到线程问题就不用静态调用了,
    那是不是ABC都得实例化comm呢,因为comm里面方法很多,如果是都得实例化的话那不是一个请求要实例化3次comm,内存会不会占太多了?还是有更好的办法
      

  6.   

    不要去考虑内存,静态方法和非静态方法基本一样,都在方法表里,分配在加载堆中,一直存在,只是调用的方式不一样。
    考虑你个类的作用和功能,new实例化一个类 可以在运行时进行初始化值、可以实现接口、重写方法等等
    如果 只是一个简单的类,如 Comm类,用静态方法更方便调用。
      

  7.   

    就是经常要用到这静态个方法,值不会受影响吧。
    还有个问题,当通用的方法特别特别的多,基本每次请求都用到,而每天有百多万次的请求,在这种情况下用静态的好,还是实例化的好呢?当然是new的好 如果把很多通用的方法写到一个类comm,
    页面A处理过程中,需要用到类B于是就实例化B,然后B要实例化C
    A和B和C都需要用到通用方法comm,考虑到线程问题就不用静态调用了,
    那是不是ABC都得实例化comm呢,因为comm里面方法很多,如果是都得实例化的话那不是一个请求要实例化3次comm,内存会不会占太多了?还是有更好的办法
    new出来更安全 以后的问题更少  也占用不了多少内存 
      

  8.   

    如果涉及到线程并发的应该就不会用static方法了
      

  9.   

    方法内使用的局部变量都会释放(当然指的是栈上的),但使用到的静态成员变量不会(分配的区不一样)
    程序集加载后,不管是静态还是实例方法,都会保存方法目录(类似一张表,保存各个方法的地址)
    直到程序集被卸载/进程结束所以两者在使用上没有区别,只是在OOP设计上不同
      

  10.   


    如果没有使用到任何成员变量(定义在方法外面),一样不会有任何问题
    如果没有使用到任何成员变量(定义在方法外面),一样不会有任何问题public class ComUtils
    {
        public static string GetCookieStr(string s)//获得cookie值
        {
            HttpCookie c = HttpContext.Current.Request.Cookies[s];
            return c == null ? "" : c.Value;
        }
        public static string GetMd5(string s)//获得md5密文
        {
            MD5 md5 = new MD5();//实例
            return string.IsNullOrEmpty(s) ? "" : md5.GetMD5(s);
        }
        public static string GetReferrer//获得UrlReferrer
        {
            get
            {
                Uri Uri = HttpContext.Current.Request.UrlReferrer;
                return Uri == null ? "" : Uri.Host.ToString();
            }
        }
        public static string GetUrlTokenDecode(string s)//获得UrlTokenDecode
        {
            try
            {
                return string.IsNullOrEmpty(s) ? "" : Encoding.Default.GetString(HttpServerUtility.UrlTokenDecode(s));
            }
            catch { log4net.Error("GetTokenDecode, s=" + s); return ""; }
        }
    }这种适合用static么,又比如获取客户端IP这种使用量巨大,没个用户过来第一件事就是拿IP,public static string GetIPAddress()
        {
            string s = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (string.IsNullOrEmpty(s))
            {
                s = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }
            if (string.IsNullOrEmpty(s))
            {
                s = HttpContext.Current.Request.UserHostAddress;
            }
            if (string.IsNullOrEmpty(s))
            {
                return "";
            }
            return s;
    }这样的合适用static不