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步开始,因为类的预置方法只执行一次。

时间: 2024-10-12 08:49:58

EffectiveC#12,13,14--成员初始化的相关文章

LINUX块设备驱动<12/13/14/15>

第 12章 +---------------------------------------------------+ |                 写一个块设备驱动                   | +---------------------------------------------------+ | 作者:赵磊                                         | | email: [email protected]             

剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 2 思路和方法 直接定义一个矩形,在矩形的四条边取值,程序大大简化. 3 核心代码 1 class Solution { 2 public: 3 vector<int> printMatrix(vector<

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...直到45结束

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...知道45结束 public class Exam3{ public static void main(String[]args){ MyThread t1=new MyThread("线程一"); MyThread t2=new MyThread("线程二"); MyThread t3=new MyThread("线程三"); t1.

已知如下数组: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

已知如下数组: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组 var dt= arr.toString().split(",").sort(function(a,b){return a-b}).map(Number);Array.from(new Set(dt)) 代码如下 var d

一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值

'''一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值''' l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]] def get(seq): for item in seq: if type(item) is list: get(item) else: print(item) get(l) 原文地址:https://www.cnblogs.com/

第12 13 14 15章总结与感悟

第12章 用户体验 12.1用户体验的要素 1.1用户的第一印象 1.2从用户的角度考虑问题,这需要“同理心”(理解别人的处境,心理,动机和能力) 用户需要帮助,但是用户没那么笨 光吃狗食也不够 1.3软件服务始终记住用户的选择 1.4短期刺激和长期影响 1.5不让用户犯简单的错误 1.6用户体验和质量 1.7情感设计 12.2用户体验设计的步骤和目标 12.3评价标准 1.尽快提供可感触的反馈 2.系统界面符合用户的现实管理 3.用户有控制权 4.一致性和标准化 5.适合各种类型的用户 6.帮

使用通配符来解决数据1和11、12/13/14的问题

update FOURxiaozhang set President23_1 = '1' WHERE President23 like '1|%';update FOURxiaozhang set President23_1 = '1' WHERE President23 = '1';update FOURxiaozhang set President23_2 = '1' WHERE President23 like '%[^1]2%';update FOURxiaozhang set Pres

12 13 14 15

第十二章 写了关于软件的用户体验,用户体验的要素:1.用户的第一印象.2.从用户的角度考虑问题.3.软件服务始终记得用户的选择.4.用户的体验和质量. 第十三章   软件测试 这一章介绍了很多关于测试的方法,比如说单元测试,代码覆盖率测试,构建验证测试,验收测试等,我有一个很纠结的问题,如果我开发软件,是把这么多测试全做完,还是挑一些测试来进行呢?如果挑一些测试进行,又很怕这个软件存在未知的缺陷,如果全部测试都做的话那需要庞大的人力物力.但是一个程序的稳定性离不开测试,所以我们可以在抽样的基础上

11 12 13 14 py单引号字符串、双引号字符串和转义符 字符串拼接 保持字符串的原汁原味

第11课 单引号字符串.双引号字符串和转义符 # 单引号字符串.双引号字符串和转义符 print('Hello World') print("Hello World") print("Let's go!") print('"OK"') print("'H',\"W\"") -------------------------- 输出结果 Let's go! "OK" 'H',"W