zoukankan      html  css  js  c++  java
  • EffectiveC#12,13,14--成员初始化

    1.在一个类里声明变量的同时,直接创建实例值.包括静态的和实例的变量

    例:object m_o = new object();
    

     如下情况时不建议这么做:第一种 值类型。

    int i=new int();//会产生装箱
    

      第二种。两个构造函数。对此种情况你有可能有疑问,你不是建议初始化吗?为什么这里不推荐这种写法。

                   原因是:当你创建一个新的MyClass对象时,特别指定集合的大小,你创建了两个数组列表。其中一个很快成为垃圾对象。

    public class MyClass 
    { 
       private ArrayList _coll = new ArrayList( ); 
       MyClass( ) { } //构造函数 而且是2个
       MyClass( int size ) { _coll = new ArrayList( size ); } 
    }
    

     2.使用静态构造函数来初始化静态成员。(发现没有,这个与上面说的相反 原因作者说是:因为异常,静态构造函数常常代替静态预置方法)

        单例设计模式使用此方法实现。

       3.编写好的构造函数.例子如下

    public class MyClass
    {
         private ArrayList _coll; 
         private string _name;
         public MyClass() : this(0,""){} 
         public MyClass( int initialCount ) :this(initiacount,"") { }
         public MyClass( int initialCount, string name ) 
         { 
            _coll = ( initialCount > 0 ) ? new ArrayList( initialCount ) : new ArrayList(); 
            _name = name; 
          } 
      }
    

     4.某个类型第一次构造一个实例时的顺序: 1、静态变量存储位 置0。 2、静态变量预置方法执行(就是初始化语法)。 3、基类的静态构造函数执行。 4、静态构造函数执行。 5、实例变量存储位 置0。 6、实例变量预置方法执行。 7、恰当的基类实例构造函数执行。 8、实例构造函数执行。 后续的同样类型的实例从第5步开始,因为类的预置方法只执行一次。

      

  • 相关阅读:
    删除无效的SQL SERVER组中的注册的几种方法
    SQLServer中把某个表里的记录复制到另一个数据库的表中
    文件上传 带进度条(多种风格)
    Team Leader你会带团队吗?你懂合作吗?你好像都不会啊!(上)
    整理.Net代码生成器(转)
    SQL SERVER 2000数据库,转换为ACCESS数据库(已解决ACCESS自动编号问题)
    js中prototype用法
    js在火狐和IE浏览器的差异
    Varnish介绍
    C# 4.0 新特性
  • 原文地址:https://www.cnblogs.com/tiantianle/p/4888066.html
Copyright © 2011-2022 走看看