日期:2014-05-18  浏览次数:20794 次

请问这两种写法那个是对的?
第一种:
C# code

public class Test
{
  private List<string> data = new List<string>();

  public Test(){};
}



第二种:
C# code

public class Test
{
  private List<string> data;

  public Test()
  {
      data = new List<string>();
  }
}



请从维护性,扩展性,底层机制解释一下好吗?
我之前一直使用第二种,印象里记得这样创造出来的对象占用堆空间少于第一种。求各位帮忙指点

------解决方案--------------------
C# code
(在家没有编译器,以下说法纯凭理论记忆,如果结果错误,请无视我的回复,不要被误导)

------解决方案--------------------
视频教程地址
http://www.enet.com.cn/eschool/video/c/10.shtml
------解决方案--------------------
楼主有点抠的太细了吧,觉得这样抠没什么必要。

两种方法在维护性和扩展性上都一样。
在底层机制上不过是类成员在哪里初始化的不同。
第一种对成员的初始化在时间上,是先于第二种在构造函数中初始化成员的。

这两种方法对内存的占用应该是一样的。
------解决方案--------------------
占用空间我认为是一样的。

但从维护性上我认为第二种要略优于第一种。
原因如下:
当对一个类初始化的时候有可能会出异常(当然了,List类可能不会),如果要捕获异常的话就只能使用第二种方法了。

学习中,如果我理解有错误请大家指出。
------解决方案--------------------
效果 几乎一样。
 第一种好点,只有一条语句,声明即赋值,快一点, 对开发者来说,直接点,更快读懂语句!
------解决方案--------------------
就lz这个代码而论,前者更好。
------解决方案--------------------
我认为第一种好,首先他们效果都是一样的。
但第一种语句简短,维护起来方便,不用去找他实例化的地方,而且如果说你类中还有待参数的构造函数,那就有多个实例化语句的代码。
如果实例化代码比较集中而当初就有实例化,性能应该会比较好(基本感觉不到,太钻牛角尖了)。
所以我认为说第一种比较好。
------解决方案--------------------
探讨
就lz这个代码而论,前者更好。

------解决方案--------------------
探讨
……
但第一种语句简短,维护起来方便,不用去找他实例化的地方,
……

------解决方案--------------------
探讨

引用:
……
但第一种语句简短,维护起来方便,不用去找他实例化的地方,
……

维护代码就是修改代码,当修改代码时修改者应该对当前项目的业务逻辑或相关业务有全面的了解(哪怕只修改一行代码)。
所以我感觉“维护起来方便,不用去找他实例化的地方”这句话不对。