用哪种静态形式比较好(静态成员+直接初始化,静态成员+静态构造函数,静态成员+实例属性初始化)

TangZhongxin 2010-01-09 11:09:22
用哪种静态形式比较好?
静态成员,直接初始化;
静态成员,静态构造函数;
静态成员,实例属性初始化;

using System;

namespace StaticInitTest{

public class MyClass{
public static void Main()
{
new UserA().ShowDateTime();
System.Threading.Thread.Sleep(123);
new UserB().ShowDateTime();
System.Threading.Thread.Sleep(123);
new UserC().ShowDateTime();
}
}

public class UserA{
//1.直接用静态成员
private static UserUtility MyUtility =new UserUtility();
public void ShowDateTime(){
Console.WriteLine(MyUtility.GetNowDateTime());
}
}//UserA
public class UserB{
//2.用静态构造函数
static UserB(){
MyUtility=new UserUtility();
}
private static UserUtility MyUtility;
public void ShowDateTime(){
Console.WriteLine(MyUtility.GetNowDateTime());
}
}//UserB
public class UserC{
//3.用属性+静态成员
protected UserUtility MyUtility{
get{
if(_myutility==null)
_myutility=new UserUtility();
return _myutility;
}
}
private static UserUtility _myutility;
public void ShowDateTime(){
Console.WriteLine(MyUtility.GetNowDateTime());
}
}//UserC

public class UserUtility{
public string GetNowDateTime(){
DateTime dt = DateTime.Now;
return string.Format("现在时间是{0} {1}:{2}",
dt.ToShortDateString(),
dt.ToLongTimeString(),
dt.Millisecond.ToString("000")
);
}
}//UserUtility
}

...全文
94 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyzs2001 2010-01-19
  • 打赏
  • 举报
回复
静态字段属于共享的
U2008 2010-01-19
  • 打赏
  • 举报
回复
等!
ouc_ajax 2010-01-19
  • 打赏
  • 举报
回复
UserA直接进行静态变量的初始化,不好!
UserB使用了静态的构造函数,这样可以做到延迟创建,只有在UserB这个
类被用的时候才会初始化静态变量。
UserC是我们自己的方式去模拟UserB的效果,简单明了。MyUtility属性做到了
只有类调用MyUtility属性的时候才会去初始化静态变量。控制的粒度更细,如果User
类很大的时候,这样控制比较好。

静态变量,很多时候可以使用单例模式。注意锁,保证线程安全等!
TangZhongxin 2010-01-19
  • 打赏
  • 举报
回复
没有更详细的回答吗?
flyfly2008 2010-01-09
  • 打赏
  • 举报
回复
studing
antony1029 2010-01-09
  • 打赏
  • 举报
回复
你的userA和userB应该是一样的。UserC 是延迟初始化的做法。用到属性MyUtility的时候才会赋值
小范f-li.cn 2010-01-09
  • 打赏
  • 举报
回复
静态成员,静态构造函数;
静态成员,实例属性初始化;

111,122

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧