对象初始化器(Object Initializers)

对象初始化器(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

时间: 2024-10-22 16:05:48

对象初始化器(Object Initializers)的相关文章

C#3.0对象初始化器和集合初始化器

C# 3.0 中对象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完.这样在LINQ的使用中,我们才不会把一个LINQ表达式写的巨复杂无比. 由于我看到几篇讲 对象初始化器(Object Initializers)和集合初始化器(Collection Initializers) 的文章,都是一个简单的例子,一些稍稍特殊一点的场景的初始化赋值并没有涉及,所以我特整理这篇博客

C#3.0之自动属性和对象初始化器

C#3.0中定义属性更加方便,不用再在像之前的版本那样的繁琐,需要先定义存储数据的字段,然后再定义属性器,现在只需要定义属性器就可以了,其它的有编译器自动为我们完成,就可以省去定义字段时需要的那些时间:在对象初始化的时候我们可在对象构造的时候实现对象属性的初始化工作,和集合初始化类似. 1.匿名属性 定义属性如下: public class Employee { public int Id { get; set; } public string Name { get; set; } public

艾伟:C#3.0之自动属性和对象初始化器

C#3.0中定义属性更加方便,不用再在像之前的版本那样的繁琐,需要先定义存储数据的字段,然后再定义属性器,现在只需要定义属性器就可以了,其它的有编译器自动为我们完成,就可以省去定义字段时需要的那些时间:在对象初始化的时候我们可在对象构造的时候实现对象属性的初始化工作,和集合初始化类似. 1.匿名属性 定义属性如下: public class Employee {public int Id { get; set; }public string Name { get; set; }public st

c#对象初始化器、自动实现字段

c#对象初始化器.自动实现字段 对象初始化器 在new对象的时候指定若干个成员为特定的值. 就是语法糖,相当于调用不带形参的构造函数后再挨个赋值. 例一 例二 自动实现字段 public int age { get; set; } 从功能上等价于 private int m_age; public int age { get { return m_age; } set { m_age = value; } } 也就是一开始的时候,先偷懒,写成 public int age { get; set;

C#3.0中自动属性和对象初始化器

C#3.0中定义属性更加方便,不用再在像之前的版本那样的繁琐,需要先定义存储数据的字段,然后再定义属性器,现在只需要定义属性器就可以了,其它的有编译器自动为我们完成,就可以省去定义字段时需要的那些时间:在对象初始化的时候我们可在对象构造的时候实现对象属性的初始化工作,和集合初始化类似. 1.匿名属性 定义属性如下: public class Employee { public int Id { get; set; } public string Name { get; set; } public

C# 3.0语言新特性(语言规范):4 对象和集合初始化器

对象|规范|集合 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 一个对象创建表达式可以包含一个对象或集合初始化器,用于初始化新创建的对象的成员或新创建的集合的元素. object-creation-expression:new  type  (  argument-listopt  )  object-or-collection-initializeroptnew  type  object-or-collection-initia

C#3.0语言新特性之对象和集合初始化器

在C#3.0中,一个对象创建表达式可以包含一个对象或集合初始化器,用于初 始化新创建的对象的成员或新创建的集合的元素. 对象创建表达式: new type (argument-list(可选)) 对象或集合初试化器(可选) new type 对象或集合初试化器 一个对象创建表达式可以省略构造器参数列表,并将其连同圆括号一起替换 为一个对象或集合初始化器.省略构造器参数列表并将其连同圆括号一起替换为 一个对象或集合初始化器等价于指定一个空的参数列表. 在执行一个带有对象或集合初始化器的对象创建表达

Linq之隐式类型、自动属性、初始化器、匿名类

目录 写在前面 系列文章 隐式类型 自动属性 初始化器 匿名类 总结 写在前面 上篇文章是本系列的小插曲,也是在项目中遇到,觉得有必要总结一下,就顺手写在了博客中,也希望能帮到一些朋友.本文将继续介绍linq系列的基础知识,隐式类型,自动属性,初始化器,匿名类的相关概念,这些内容也许与linq相关也许不相关,但还是放一起总结吧,也算是复习了.部分内容通过反编译的方式一探究竟. 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda进阶 隐式类型 先看看Msdn上对隐式类型的简单定

剖析一个java对象初始化顺序问题

今天我在Dzone阅读了一篇关于java对象实例初始化顺序的有趣文章.说它有趣,是因为作者使用了一种并不太推荐的编码风格,只有用这种编码风格才能触发这个极为少见的 Java object initialization order 问题. 其实java对象初始化顺序算是一个比较基础的java知识点.但是网上的文章多半描述不清,使用上一不小心就容易出问题. 所以在本文中,我想结合JLS和自己的理解,举例剖析问题的所在. OK,我们先来看个模仿Dzone作者原意的简单例子: [java] packag