对象初始化器(Object Initializers)

作者:袖梨 2022-06-25

对象初始化器(object initializers)
定义如下类

  public class myclass  {    public int x;    public int y;    public myclass()    {    }    public myclass(int a, int b)    {      x = a;      y = b;    }  }对象初始化器object initializers

创建对象的时候可以使用如下语法:

myclass mc = new myclass() { x = 100, y = 200 };效果等同于

myclass mc = new myclass();mc.x = 100;mc.y = 200;使用默认构造函数时可以省略括号(resharper也建议省略括号)

myclass mc = new myclass { x = 100, y = 200 };如果使用带参数的构造器,初始化参数将被覆盖,比如下面的代码,最终x,y的值分别为100,200

myclass mc = new myclass(1, 2) { x = 100, y = 200 };initializing inner types

略,参考相关资料

 

集合初始化器(collection initializers):

可以使用类似初始化数组的语法初始化集合类, {}内的内容添加为集合成员,和数组初始化不一样的是必须显式调用构造函数

arraylist al = new arraylist(){1, 2, 3, 4};  //okarraylist al = new arraylist{1, 2, 3, 4};  //okarraylist al = { 1, 2, 3, 4 };    //compile failed应用范围:使用这种方式初始化的类必须实现了ienumerable接口,同时必须定义了名为add的方法,并且add方法的形参列表必须与初始化时的实参一致。

  public class someclass : ienumerable  {    public void add(int i)    {      console.writeline("add value {0}", i);    }    public void add(int i, string s)    {      console.writeline("add value {0}, {1}", i, s);    }    public ienumerator getenumerator()    {      return null;  //不影响初始化    }  }  someclass a = new someclass { 1, 2, 3};  //ok  someclass b = new someclass { {1, "aa"}, {2, "bb"}, {3,"cc"} }; //ok, 初始化dictionary使用类似的语法  someclass c = new someclass { "aa", "bb", "cc" }; //compile failed

相关文章

精彩推荐