`
bcyy
  • 浏览: 1831043 次
文章分类
社区版块
存档分类
最新评论

静态构造函数

 
阅读更多

在编写一个类的时候,如果类中有静态成员,那么最好的方法就是在类被实例化前被初始化,有个简单的方法,如:
public class MyClass{
private static string _name = "MyClass";
//other fields..
}
还有中方法:
public class MyClass{
private static string _name;
static MyClass(){
this._name = "MyClass";
}
}
注意:static MyClass也是一中构造方法,常叫做静态构造方法,该方法内只能访问类中静态成员,因此下面的操作是错误的
public class MyClass{
private static string _name;
private Provider _provider;
static MyClass(){
this._name = "MyClass";
this._provider = new Provider(); //error
}
}

延迟加载:
所谓延迟加载就是在需要使用的时候加载,而不是构造时就加载好,根据它的原理可以很显然的看出它的一些使用的场合在一个类A中,如果其组合了另一个更大的类B,而这个类B很有可能在类A的生命周期中不被使用,那么类A加载类B就没什么意义了,但类A是有可能用到类B的,只是机会不多而以。例如:

//B 是个很大的类
public class B{
private BigType _bigtype;
// other a lot of fields
}

public class A{
private int _a;
private B _b;
public A(){
this._a = -1;
this._b = new B();
}
public int a{
get{ return this._a; }
}
//很少被使用
public B b{
get{ return this._b; }
}
}
在类A被实例化时,A a = new A();_b就不初始化,但是之后就再没用到过_b了,更好的方法:
public class class A{
private int _a;
private B _b;
public A(){
this._a = -1;
}

public int a{
get{ return this._a; }
}

public B b{
get{
if(this._b == null)
this._b = new B()'
return this._b;
}
}
}
这样一来,只有在_b第一次被使用时才被赋值.之后再使用就不必再赋值。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics