静态方法和非静态方法的区别 ,Google一搜一大堆
解决方案 »
- 一个关于软件使用期限的问题
- 关于C#和framework
- 一个C#作业题 请高手帮忙
- C#2005开发是否能建在IIS的根 及开发方便部署问题如何解决?
- HyperLink 控件怎么实现往两个页传值
- 新手问题,请赐教
- 有人熟悉Smart Client吗?有个问题请教
- 菜鸟问题,请大家帮我人门
- 在c#中怎么把excel中时间格式的单元格转换为字符串格式??
- 我使用ComponentOne For Net中的c1TextBox绑定到字段,但是我想输入Empty字符串,却怎是输入NULL,请问有什么解决办法?
- 反序列化问题:出现内部错误。无法从“System.Int32”中分配“System.String”- 生成序列化的代码时出错。
- app.config总是无法读取。很简单的配置
第一种应该这样写:
public static class CommonRequest//通用
{
public static int GetUserLoginTimes(User user)//static
{
return User.Type == "admin"?ServiceFactory.GetFactory().GetUserService().GetUserLoginTimes(User.userId):0;
}
}
这样外部调用时,可以直接调用。第二种调用方法,外边调用时要实例化才可以调用
还有个问题,当通用的方法特别特别的多,基本每次请求都用到,而每天有百多万次的请求,在这种情况下用静态的好,还是实例化的好呢?当然是new的好
还有个问题,当通用的方法特别特别的多,基本每次请求都用到,而每天有百多万次的请求,在这种情况下用静态的好,还是实例化的好呢?当然是new的好 如果把很多通用的方法写到一个类comm,
页面A处理过程中,需要用到类B于是就实例化B,然后B要实例化C
A和B和C都需要用到通用方法comm,考虑到线程问题就不用静态调用了,
那是不是ABC都得实例化comm呢,因为comm里面方法很多,如果是都得实例化的话那不是一个请求要实例化3次comm,内存会不会占太多了?还是有更好的办法
考虑你个类的作用和功能,new实例化一个类 可以在运行时进行初始化值、可以实现接口、重写方法等等
如果 只是一个简单的类,如 Comm类,用静态方法更方便调用。
还有个问题,当通用的方法特别特别的多,基本每次请求都用到,而每天有百多万次的请求,在这种情况下用静态的好,还是实例化的好呢?当然是new的好 如果把很多通用的方法写到一个类comm,
页面A处理过程中,需要用到类B于是就实例化B,然后B要实例化C
A和B和C都需要用到通用方法comm,考虑到线程问题就不用静态调用了,
那是不是ABC都得实例化comm呢,因为comm里面方法很多,如果是都得实例化的话那不是一个请求要实例化3次comm,内存会不会占太多了?还是有更好的办法
new出来更安全 以后的问题更少 也占用不了多少内存
程序集加载后,不管是静态还是实例方法,都会保存方法目录(类似一张表,保存各个方法的地址)
直到程序集被卸载/进程结束所以两者在使用上没有区别,只是在OOP设计上不同
如果没有使用到任何成员变量(定义在方法外面),一样不会有任何问题
如果没有使用到任何成员变量(定义在方法外面),一样不会有任何问题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不