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进行修饰。

相关文章
|
4天前
|
Java C#
C# 面向对象编程解析:优势、类和对象、类成员详解
OOP代表面向对象编程。 过程式编程涉及编写执行数据操作的过程或方法,而面向对象编程涉及创建包含数据和方法的对象。 面向对象编程相对于过程式编程具有几个优势: OOP执行速度更快,更容易执行 OOP为程序提供了清晰的结构 OOP有助于保持C#代码DRY("不要重复自己"),并使代码更易于维护、修改和调试 OOP使得能够创建完全可重用的应用程序,编写更少的代码并减少开发时间 提示:"不要重复自己"(DRY)原则是有关减少代码重复的原则。应该提取出应用程序中常见的代码,并将其放置在单一位置并重复使用,而不是重复编写。
52 0
|
4天前
|
C# 开发者
C# 9.0中的模块初始化器:程序启动的新控制点
【1月更文挑战第14天】本文介绍了C# 9.0中引入的新特性——模块初始化器(Module initializers)。模块初始化器允许开发者在程序集加载时执行特定代码,为类型初始化提供了更细粒度的控制。文章详细阐述了模块初始化器的语法、用途以及与传统类型初始化器的区别,并通过示例代码展示了如何在实际项目中应用这一新特性。
|
2天前
|
C#
C#的类和对象的概念学习案例刨析
【5月更文挑战第17天】C#是一种面向对象的语言,以类和对象为核心。类作为对象的模板,定义了属性(如Name, Age)和行为(如Greet)。对象是类的实例,可设置属性值。封装通过访问修饰符隐藏实现细节,如Customer类的私有name字段通过Name属性访问。继承允许新类(如Employee)从现有类(Person)继承并扩展。多态让不同对象(如Circle, Square)共享相同接口(Shape),实现抽象方法Area,提供灵活的代码设计。
9 1
|
4天前
|
自然语言处理 C# 数据安全/隐私保护
50.c#:string类初始化
50.c#:string类初始化
131 1
|
4天前
|
存储 C#
C#对象和类
C#对象和类
19 0
|
4天前
|
存储 C#
C#基础语法(类和对象)
C#基础语法(类和对象)
21 2
|
4天前
|
存储 C# 容器
掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南
变量是用于存储数据值的容器。 在 C# 中,有不同类型的变量(用不同的关键字定义),例如: int - 存储整数(没有小数点的整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99 char - 存储单个字符,如 'a' 或 'B'。Char 值用单引号括起来 string - 存储文本,如 "Hello World"。String 值用双引号括起来 bool - 存储具有两个状态的值:true 或 false
44 2
|
4天前
|
Java 编译器 C#
【从Java转C#】第三章:对象和类型
【从Java转C#】第三章:对象和类型
|
10月前
|
C#
C#中声明、初始化和实例化
C#中声明、初始化和实例化