C#对象初始化器

C# 构造器(构造器链),终结器,对象初始化器 一、构造器 1、注意事项 @1、构造器是用来创建对象实例的方法,该方法没有返回类型,访问级别必须为public,方法名必须完全和类名相同。 @2、C#编译器会在编译时自动添加一个默认构造器(不获取参数,什么也不做)。然而,一旦为一个类显式添加了一个构造器,c#编译器就不会再 阅读详情

一、介绍

对象初始化器是在构造器后使用的初始化赋值补充语法。
在构造器后使用{},依次指定成员名和赋值表达式,以逗号进行分隔。
对象初始化器不能为只读字段赋值。(可以对具有init访问器的属性进行赋值)

一个实例构造出来的运行顺序

  1. 成员上赋值的初始值
  2. 构造器中的赋值
  3. 对象初始化器赋值

基本形式

new 类名(参数){初始化表达式1, 初始化表达式2};

无参构造器使用对象初始化器,可以省略括号

new 类名{初始化表达式1, 初始化表达式2};

二、应用

2.1 例子

using System;

namespace PropertyDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            InitializationDemo initializationDemo = new InitializationDemo(0) {  Num2=2,num3=3 };
            initializationDemo.ShowNum();

            Console.ReadKey();
        }
    }

    public class InitializationDemo
    {
        private int num1;
        private int num2;
        public  int num3;

        public int Num2
        {
            get => num2;
            set => num2 = value;
        }

        public InitializationDemo(int num1)
        {
            this.num1 = num1;
        }
        public void ShowNum()
        {
            Console.WriteLine("num1:{0},num2:{1},num3:{2}", num1, num2, num3);
        }
    }
}

2.2 对象克隆器

对于记录类型和结构类型可以使用with克隆目标的值,并使用对象初始化器修改一些值。

Point p1 = new Point() { X = 3, Y = 4 };
Point p2 = p2 with { X = 5 };

克隆的过程不会经过赋值操作(set访问器),但之后的对象初始化器的赋值会触发赋值。

2.3 集合初始化

实现了IEnumerable接口并且具有Add方法的类型,可以在对象初始化器中传入多个元素,这些元素会作为参数依序调用Add方法。

System.Collections.ArrayList list = 
              new System.Collections.ArrayList() { 1, 2, 3 };

2.4 匿名类

匿名类是一种临时类,没有名字,必须通过var来推断类型。
和元组类似,用于打包一系列的值。但这些值是只读属性,不能更改。
匿名类型的语法是使用new关键字和对象初始化器,指定属性的名称和值。

var person = new { Name = "Alice", Age = 20 };

2.5 所需成员

暴露的并且可更改的成员,可以添加required进行修饰。
创建实例时会要求必须使用对象初始化器对他们进行赋值。

class Student
{
    public required int Age { get; set; }
    public required string Name;
}
Student st = new Student { Age=20,Name="小明" };

在派生类中,重写这些成员时,需要沿用required进行修饰。

C# 对象初始化器 对象初始化器是 C# 中一个方便且简洁的特性,它提供了一种直观的方式来初始化对象的属性值。通过灵活运用对象初始化器,我们可以在代码中更加清晰地表达对象的创建和初始化过程,提高代码的可读性和可维护性。需要注意的是,对象初始化器只能用于可读写的属性,而不能用于只读属性或字段的初始化。另外,如果类没有提供默认的无参数构造函数,那么在使用对象初始化器创建对象时,必须确保提供了所需的构造函数参数。对象初始化器不仅可以在对象创建时设置属性的值,还可以用于集合类型的初始化。对象初始化器还支持嵌套对象的初始化。 阅读详情

相关推荐

C#编程技巧:对象和集合初始化器的使用

本文深入探讨了C#中的对象和集合初始化器技术,包括如何使用初始化器来实例化和初始化对象和集合,以及匿名类型和类型推断的概念。通过实例代码和详细的解释,揭示了这些技术如何简化代码,并在创建和管理数据表示类型时提供便利。

weixin_32869687的博客 524

c#入门-对象初始化器

在使用构造器后,如果紧接着需要对其的字段或属性进行赋值,这称为初始化操作。初始化操作可以使用大括号接在构造器后,用来醒目提示这是一个初始化操作。使用对象初始化器时,每个字段或属性只能进行一次赋值。每个赋值使用逗号隔开,赋值时只需要写属性或字段的名字,不需要写你对这个对象的变量名。如果此构造器是无参构造器,那么还可以省略构造器的小括号。

zms9110750的博客 2527

老N卡福音:GT1030/GTX1050在MacOS Ventura 13.2上的完整驱动指南(附实测截图)

本文详细介绍了如何在MacOS Ventura 13.2上通过OCLP工具链驱动GT1030和GTX1050等老款NVIDIA显卡,涵盖硬件兼容性验证、BIOS设置、OpenCore配置、驱动安装及性能测试全流程。实测数据显示,这些基于Pascal和Maxwell架构的显卡在当代MacOS系统中仍能发挥实用价值,为老N卡用户提供完整解决方案。

weixin_30832143的博客 631

c#笔记-对象初始化器

对象初始化器是在构造器后使用的初始值赋值补充语法。它可以在构造器后使用花括号,依次指定成员名和赋值表达式,以逗号分隔。对象初始化器不能为只读字段赋值,但可以对具有init访问器的属性进行赋值。一个实例构造出来的时候运作顺序是所以对于节省性能是没有帮助的,只能让他更简洁醒目,一个合并为单条语句。例如如果构造的实例是要参与表达式运算的。

zms9110750的博客 1229

l0phtcrack 7(爆破管理员密码)使用教程

l0phtcrack7简称lc7,是爆破计算机管理员密码的软件,早期是网络安全管理员用来检测系统用户是否使用了不安全的密码,后被黑客用于用户口令破解 功能:该工具支持远程破解,理论上能破解所有密码,但对复杂度比较高的密码,破解时间很长 使用前提:1.登录了需要破解的计算机 2.知道需要破解的计算机的一个管理员的账户,密码 ** 也许你会疑惑,我都知道了一个管理员账户密码了,还要另外的管理员密码...

Xiongcanne的博客 2万+

【Macbook-Latex安装部署教程】【Win-Texlive镜像下载】【简单易上手】MacTex+Vscode/Texstudio

该教程记录自己在mac()上安装部署Latex环境的经验,整个教程操作简单,配置要求少,易上手。教程分成三部分:Mactex下载与安装,Vscode插件下载与配置文件修改,Texstudio安装。

sunriseOvO的博客 2567

8C#对象初始化器

//文章末尾有源码的地址 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _8对象初始化器 { public class Student { #region 属性 public int StudentId { get; set; } public string StudentNmae { get; set;

weixin_39875396的博客 180

Python量化交易实战:pytdx库高效获取通达信分笔成交数据

本文详细介绍了如何使用Python的pytdx库高效获取通达信分笔成交数据,为量化交易提供关键市场微观结构分析。通过环境搭建、服务器连接、数据获取与清洗的完整流程,帮助开发者快速掌握这一免费高质量数据源,并实现分笔数据的实战分析与应用。

weixin_29061509的博客 1345

c#对象初始化器

c#对象初始化器 以往在对对象属性进行初始化时我们一般会使用构造方法的形式对对象属性进行初始化,如 class Program { static void Main(string[] args) { Student student = new Student(15, "spring","男"); } ...

Maybe_ch的博客 4924

从零到一:手把手教你用海康VisionMaster完成第一个字符识别项目(附完整流程与避坑点)

本文详细介绍了如何使用海康VisionMaster完成首个字符识别项目,涵盖从环境搭建、图像预处理到系统集成的完整流程。特别分享了Blob分析配置、字符识别优化等实战技巧,帮助开发者避开常见陷阱,快速掌握VisionMaster的基本操作,提升工业自动化场景下的字符识别效率。

weixin_29313423的博客 664

【笔记软件obsidian】从入门到精通

目录 一、前言 二、下载及安装 三、【选修】ios用户如何通过iCloud进行三平台同步 四、基本Markdown语法 五、【选修】插件的下载及安装方式 六、

patrick的博客 9万+

C# 对象初始化器:让对象创建更简洁优雅

C#3.0引入的对象初始化器简化了对象创建与属性赋值的语法。通过new Student { Name = "张三", Age = 25 },可将构造与初始化合为一体,提升代码简洁性与可读性。仅限可访问成员,按顺序执行,类型需匹配。相比传统多行赋值,更高效直观,是日常开发中设置对象属性的推荐方式。

德仔 1191

C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现(史上最全)

本文详细介绍了Socket通信中多个异步Udp客户端功能的实现、介绍如何使用多个客户端与多个服务器进行数据的交互,包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!

qq_34059233的博客 1981

c# 对象初始化器

c# 对象初始化器 经济鲨鱼2017-05-20 00:45:325537收藏3 分类专栏:C#入门文章标签:c#对象 版权 创建对象 什么是对象初始化器?对象在创建时也可以通过对象初始化器完成”属性的初始化”。 但是对象初始化器只在.NET3.0以后的版本中使用 !!! 只能在.NET3.0及其后续版本中使用 使用以往的”无参”与”有参”构造方法创建学员对象 第一种方式比较麻烦, 第二种达到了效率的提高: 但是在编写中必须清楚的知道参数的个数,以及它们的位置。 ...

weixin_42365213的博客 405

CAPL通过SecMgrCANoeClient.dll实现AES 128

需要加载SecMgrCANoeClient.dll这个动态库,可以在canoe安装路径下Exec32这个文件夹里找。这个库不是哪版canoe都带,canoe15就没有,11,14是有的。我需要用到的是AES 128 ECB nopadding,这里函数介绍说是padding mode PKCS5,但是最后算出的结果是我可以使用的。CAPL中可以使用下列函数实现AES 128的算法。需要注意输入输出字节的长度。

天赐好车的博客 4928

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C#对象和集合初始化器

对象初始化器(Object initializers ) 参见:MSDN 使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。 下面的示例演示如何将对象初始值设定项用于命名类型 (Cat)。 请注意,在 Cat类中使用了自动实现的属性。 class Cat { // Auto-implemented properties.

Ungeiliviabler 942

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c# 使用初始化器初始化对象

class Goods { private string strName; public string Name { get { return strName; } set { strName = value; } } private decimal decPr

wzk456的专栏 1033

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

对象和集合初始化器(C# 编程指南)

C# 允许您在单个语句中实例化对象或集合并执行成员分配。 对象初始化器 对象初始化器允许您在创建时为对象的任何可访问字段或属性赋值,而无需调用构造函数,然后调用赋值语句行。 对象初始值设定项语法使您能够为构造函数指定参数或省略参数(和括号语法)。 以下示例显示如何使用具有命名类型 Cat 的对象初始值设定项以及如何调用无参数构造函数。 请注意在 Cat 类中使用自动实现的属性。 public class Cat { // Auto-implemented properties. pu

weixin_45582785的博客 833

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

为了提供更合理的构造函数,我们不得不进行多次构造函数的重载,使得用户的调用更加简单。但是这样的排列组合随着参数的增加成几何级增长,的确很不方便。现在有了Object and Collection Initializer(对象和集合初始化器)就方便多了。      举个例子:   private class Cat { // Auto-implemented propertie

博客 1819

C# 3.0特性-- 对象初始化器

C# 3.0特性-- 对象初始化器 有一个简单的定义类, class Book { public string SN { get; set; } public string Name { get; set; } public double Price { get; set; } } 有三个属性,并且用自动属性语法来定

Howesdomo的专栏 665

C#3.0 中对象初始化器(Object Initializers)和集合初始化器(Collection Initializers)

C# 3.0 中对象初始化器(Object Initializers)  和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完。这样在LINQ的使用中,我们才不会把一个LINQ表达式写的巨复杂无比。   由于我看到几篇讲 对象初始化器(Object Initializers)和集合初始化器(Collection Initia

软件开发资料汇总 455
上一篇: C#属性介绍
下一篇: 开源许可证
暴风雨中的白杨
博客等级 码龄6年 1070粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值