windows C#-使用对象初始值设定项初始化对象

可以使用对象初始值设定项以声明方式初始化类型对象,而无需显式调用类型的构造函数。

以下示例演示如何将对象初始值设定项用于命名对象。 编译器通过首先访问无参数实例构造函数,然后处理成员初始化来处理对象初始值设定项。 因此,如果无参数构造函数在类中声明为 private,则需要公共访问的对象初始值设定项将失败。

如果要定义匿名类型,则必须使用对象初始值设定项。

示例

下面的示例演示如何使用对象初始值设定项初始化新的 StudentName 类型。 此示例在 StudentName 类型中设置属性:

public class HowToObjectInitializers
{public static void Main(){// Declare a StudentName by using the constructor that has two parameters.StudentName student1 = new StudentName("Craig", "Playstead");// Make the same declaration by using an object initializer and sending// arguments for the first and last names. The parameterless constructor is// invoked in processing this declaration, not the constructor that has// two parameters.StudentName student2 = new StudentName{FirstName = "Craig",LastName = "Playstead"};// Declare a StudentName by using an object initializer and sending// an argument for only the ID property. No corresponding constructor is// necessary. Only the parameterless constructor is used to process object// initializers.StudentName student3 = new StudentName{ID = 183};// Declare a StudentName by using an object initializer and sending// arguments for all three properties. No corresponding constructor is// defined in the class.StudentName student4 = new StudentName{FirstName = "Craig",LastName = "Playstead",ID = 116};Console.WriteLine(student1.ToString());Console.WriteLine(student2.ToString());Console.WriteLine(student3.ToString());Console.WriteLine(student4.ToString());}// Output:// Craig  0// Craig  0//   183// Craig  116public class StudentName{// This constructor has no parameters. The parameterless constructor// is invoked in the processing of object initializers.// You can test this by changing the access modifier from public to// private. The declarations in Main that use object initializers will// fail.public StudentName() { }// The following constructor has parameters for two of the three// properties.public StudentName(string first, string last){FirstName = first;LastName = last;}// Properties.public string? FirstName { get; set; }public string? LastName { get; set; }public int ID { get; set; }public override string ToString() => FirstName + "  " + ID;}
}

对象初始值设定项可用于在对象中设置索引器。 下面的示例定义了一个 BaseballTeam 类,该类使用索引器获取和设置不同位置的球员。 初始值设定项可以根据位置的缩写或每个位置的棒球记分卡的编号来分配球员:

public class HowToIndexInitializer
{public class BaseballTeam{private string[] players = new string[9];private readonly List<string> positionAbbreviations = new List<string>{"P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF"};public string this[int position]{// Baseball positions are 1 - 9.get { return players[position-1]; }set { players[position-1] = value; }}public string this[string position]{get { return players[positionAbbreviations.IndexOf(position)]; }set { players[positionAbbreviations.IndexOf(position)] = value; }}}public static void Main(){var team = new BaseballTeam{["RF"] = "Mookie Betts",[4] = "Jose Altuve",["CF"] = "Mike Trout"};Console.WriteLine(team["2B"]);}
}

下一个示例演示使用带参数和不带参数的构造函数执行构造函数和成员初始化的顺序:

public class ObjectInitializersExecutionOrder
{public static void Main(){new Person { FirstName = "Paisley", LastName = "Smith", City = "Dallas" };new Dog(2) { Name = "Mike" };}public class Dog{private int age;private string name;public Dog(int age){Console.WriteLine("Hello from Dog's non-parameterless constructor");this.age = age;}public required string Name{get { return name; }set{Console.WriteLine("Hello from setter of Dog's required property 'Name'");name = value;}}}public class Person{private string firstName;private string lastName;private string city;public Person(){Console.WriteLine("Hello from Person's parameterless constructor");}public required string FirstName{get { return firstName; }set{Console.WriteLine("Hello from setter of Person's required property 'FirstName'");firstName = value;}}public string LastName{get { return lastName; }init{Console.WriteLine("Hello from setter of Person's init property 'LastName'");lastName = value;}}public string City{get { return city; }set{Console.WriteLine("Hello from setter of Person's property 'City'");city = value;}}}// Output:// Hello from Person's parameterless constructor// Hello from setter of Person's required property 'FirstName'// Hello from setter of Person's init property 'LastName'// Hello from setter of Person's property 'City'// Hello from Dog's non-parameterless constructor// Hello from setter of Dog's required property 'Name'
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSCP课后练习-tcpdump

本篇文章旨在为网络安全渗透测试行业OSCP考证教学。通过阅读本文&#xff0c;读者将能够对tcpdump日志分析关键信息过滤有一定了解 1、下载练习分析文件 wget https://www.offensive-security.com/pwk-online/password_cracking_filtered.pcap2、查看分析文件所有内容 sudo t…

Windows下C++使用SQLite

1、安装 进入SQLite Download Page页面&#xff0c;下载sqlite-dll-win-x86-*.zip、sqlite-amalgamation-*.zip、sqlite-tools-win-x64-*.zip三个包&#xff0c;这三个包里分别包含dll文件和def文件、头文件、exe工具。 使用vs命令行工具生成.lib文件&#xff1a;进入dll和def文…

文件上传绕过最新版安全狗

更多网安思路&#xff0c;可前往无问社区 http分块传输绕过 http分块传输⼀直是⼀个很经典的绕过⽅式&#xff0c;只是在近⼏年分块传输⼀直被卡的很死&#xff0c;很多waf都开始加 ⼊了检测功能&#xff0c;所以的话&#xff0c;分块传输这⾥也不是很好使&#xff0c;但是配…

搭建Elastic search群集

一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件&#xff1a; /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…

正点原子串口例程解读

首先是串口初始化&#xff0c;这里初始化的是usart3 void esp8266_init(void) {huart_wifi.InstanceESP8266; //uart3huart_wifi.Init.BaudRate115200; // 设置波特率为115200huart_wifi.Init.WordLengthUART_WORDLENGTH_8B; // 设置数据位长度为8位huart_wifi.Init.StopBi…

KVM虚拟机管理脚本

思路&#xff1a; 在/opt/kvm下创建一个磁盘文件&#xff0c;做差异镜像&#xff0c;创建一个虚拟机配置文件&#xff0c;做虚拟机模版 [rootnode01 ~]# ls /opt/kvm/ vm_base.qcow2 vm_base.xml创建虚拟机的步骤&#xff1a;首先创建虚拟机的差异镜像&#xff0c;然后复制虚…

Null value was assigned to a property of primitive type setter of 的原因与解决方案

Null value was assigned to a property of primitive type setter of 的原因与解决方案 org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.xxx.xxx.DealerUser.dealerId数据库表结构 实体类 当数据库的dealer…

【数据结构与算法】排序算法(下)——计数排序与排序总结

写在前面 书接上文&#xff1a;【数据结构与算法】排序算法(中)——交换排序之快速排序 文章主要讲解计数排序的细节与分析源码。之后进行四大排序的总结。 文章目录 写在前面一、计数排序(非比较排序)代码的实现&#xff1a; 二、排序总结 2.1、稳定性 3.2、排序算法复杂度及…

Multi移动端开发

Multi移动端开发 安装环境 安装功能 VS2022安装 【ASP.NET和Web开发】、【.NET Multi-platform App UI开发】、【.NET桌面开发】 配置程序源 【工具】–>【选项】–>【NuGet包管理器】–>【程序包源】&#xff0c;添加如下&#xff1a; 名称&#xff1a;MES_APP 源&…

若依plus apifox导入接口显示为空

项目已经正常启动 访问接口有些没问题&#xff0c;有些有问题 其他模块都可以正常导入 解决&#xff1a;

音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…

英文学术会议海报poster模板【可编辑】

英文学术会议海报poster模板【可编辑】 下载链接&#xff1a;学术会议海报poster模板【可编辑】 横版海报 竖版海报 下载链接&#xff1a;学术会议海报poster模板【可编辑】 提供了一套学术海报的PPT模板&#xff0c;适用于学术会议、研讨会等场合。 竖版&#xff0c;包含11…

机器学习之KNN算法预测数据和数据可视化

机器学习及KNN算法 目录 机器学习及KNN算法机器学习基本概念概念理解步骤为什么要学习机器学习需要准备的库 KNN算法概念算法导入常用距离公式算法优缺点优点&#xff1a;缺点︰ 数据可视化二维界面三维界面 KNeighborsClassifier 和KNeighborsRegressor理解查看KNeighborsRegr…

Jmeter自学【8】- 使用JMeter模拟设备通过MQTT发送数据

今天使用jmeter推送数据到MQTT&#xff0c;给大家分享一下操作流程。 一、安装JMeter 参考文档&#xff1a;Jmeter自学【1】- Jmeter安装、配置 二、安装MQTT插件 1、下载插件 我的Jmeter版本是5.6.3&#xff0c;用到的插件是&#xff1a;mqtt-xmeter-2.0.2-jar-with-depe…

若依框架中的上传图片后如何实现回显到页面的

在日常开发中&#xff0c;总会遇到上传文件、图片等功能&#xff0c;然后本地开发的话&#xff0c;又没有像OSS、七牛等网络存储&#xff0c;这个时候通常将文件上传到本地&#xff0c;那么上传之后拿到的是本地的路径&#xff0c;存储到数据库中&#xff0c;查询的时候如何将本…

Linux 文件 I/O 基础

目录 前言 一、文件描述符&#xff08;File Descriptor&#xff09; 二、打开文件&#xff08;open 函数&#xff09; 三、读取文件&#xff08;read 函数&#xff09; 四、写入文件&#xff08;write 函数&#xff09; 五、关闭文件&#xff08;close 函数&#xff09; …

【CSS in Depth 2 精译_091】15.4:让 CSS 高度值过渡到自动高度 + 15.5:自定义属性的过渡设置(全新)+ 15.6:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 15 章 过渡】 ✔️ 15.1 状态间的由此及彼15.2 定时函数 15.2.1 定制贝塞尔曲线15.2.2 阶跃 15.3 非动画属性 15.3.1 不可添加动画效果的属性15.3.2 淡入与淡出 15.4 过…

路由器的原理

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网路安全入门系列 目录 路由器的原理一&#xff0c;路由器基础及相关…

spring专题笔记(七):spring如何引入外部属性文件?spring在xml配置bean时如何引入外部的properties属性文件内容?

目录 1、spring在xml配置bean时引入外部的properties属性文件内容作用是什么&#xff1f; 2、引入配置文件步骤 2.1、首先创建一个java类MyDataSource&#xff0c;主要包含四个属性。 2.2、准备一个myDataConfig.properties属性文件&#xff0c;里面配置MyDataSource类中需…