C#9引入的自定义类型record

record是C#9引入的新的引用类型,详细见官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9#record-types

在C#中,引用类型有:interface,class,delegate,数组;现在record加入了进来,这是一个与类极度相似,但又不同的类型,重点在比较两个对象相等时,不是用引用地址作比较(虽然它是个引用类型),而是用“类型名{属性名1=属性值,属性名2=属性值,……}”(注1:这是一种形象但不严格的说法)。

DDD中,有实体和值对象的概念,其中值对象定义如下:

通过对象属性值来识别的对象,它将多个相关属性组合为一个概念整体——《实现领域驱动设计》

就是通过这个对象的各个属性相同不相同来判断是不是同一个值对象,这时,record就最合适不过了,它能直接判断两个实例化后的对象是否相等,。

record本质上个class,对反射,dapper的适配,面向对象的特征都是相同的,demo见:https://github.com/axzxs2001/Asp.NetCoreExperiment/blob/master/Asp.NetCoreExperiment/CSharp/RecordTypeDemo/Program.cs

using Dapper;
using Npgsql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;namespace RecordTypeDemo
{class Program{static void Main(string[] args){//接口类型IShow show = new Entity1() { ID = 1, Name = "桂素伟" };Console.WriteLine(show);//输出结果:Entity1 { ID = 1, Name = 桂素伟 }//抽象类型Entity entity = new Entity1() { ID = 1, Name = "桂素伟" };Console.WriteLine(entity);//输出结果:Entity1 { ID = 1, Name = 桂素伟 }//注1:虽然 类型名{属性名1=属性值,属性名2=属性值,……} 相等,但比较结果是不等的Console.WriteLine($"show == entity结果:{show == entity}");//输出结果:show == entity结果::False//实体类型var entity1 = new Entity1() { ID = 1, Name = "桂素伟" };Console.WriteLine(entity1);//输出结果:Entity1 { ID = 1, Name = 桂素伟 }Console.WriteLine($"(entity1 == entity结果:{entity1 == entity}");//输出结果:(entity1 == entity结果:TrueConsole.WriteLine($"(entity1 == entity结果:{entity1.Equals(entity)}");//输出结果:(entity1 == entity结果:TrueAddEntity(entity);ReflectionTest(entity1);}/// <summary>/// 反射中使用record,和类相山/// </summary>/// <param name="entity"></param>static void ReflectionTest(Entity entity){var type = Assembly.GetExecutingAssembly().GetType("RecordTypeDemo.Entity");Console.WriteLine(type.IsClass);}/// <summary>/// 对dapper适配/// </summary>/// <param name="entity"></param>/// <returns></returns>static bool AddEntity(Entity entity){using (var con = new NpgsqlConnection("Server=127.0.0.1;Port=5432;UserId=postgres;Password=postgres2018;Database=postgres;")){var list = con.Query<Entity1>("select * from entitys").ToList();if (!list.Contains(entity)){con.Execute("insert into entitys(id,name) values(@id,@name)", entity);}return true;}/*表结构
CREATE TABLE public.entitys
(id integer NOT NULL DEFAULT nextval('entitys_id_seq'::regclass),name character varying(256) COLLATE pg_catalog."default",CONSTRAINT entitys_pkey PRIMARY KEY (id)
)
*/}}#region 面向对象特征和类一样/// <summary>/// 接口/// </summary>public interface IShow{void Show();}/// <summary>/// 抽象记录/// </summary>public abstract record Entity : IShow{public abstract int ID { get; set; }public abstract string Name { get; set; }public void Show(){Console.WriteLine($"{this.GetType().Name}:");Console.WriteLine($"{this.ToString()}");}}/// <summary>/// 记录/// </summary>public record Entity1 : Entity{public override int ID{get;set;}public override string Name{get;set;}}#endregion
}

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

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

相关文章

C# 8: 默认接口方法

翻译自 John Demetriou 2018年8月4日 的文章 《C# 8: Default Interface Methods》[1]C# 8 之前今天我们来聊一聊默认接口方法。听起来真的很奇怪&#xff0c;不是吗&#xff1f;接口仅用于定义契约。接口的实现类会拥有一组公共方法&#xff0c;不过实现类被赋予了以其自己的方…

跟我一起学.NetCore之MVC过滤器,这篇看完走路可以仰着头走

前言MVC过滤器在之前Asp.Net的时候就已经广泛使用啦&#xff0c;不管是面试还是工作&#xff0c;总有一个考点或是需求涉及到&#xff0c;可以毫不疑问的说&#xff0c;这个技术点是非常重要的&#xff1b; 在之前参与的面试中&#xff0c;得知很多小伙伴只知道有一两个过滤器&…

彭博社:中企游说政府否决英伟达收购Arm

9月14日&#xff0c;英伟达与软银宣布达成最终协议&#xff0c;英伟达将以400亿美元的价格从软银收购ARM。在台积电明确于9月15日后不再向HW的ARM提供代工服务之后&#xff0c;一家美国公司又将ARM收入囊中&#xff0c;这使国产ARM CPU在设计和制造环节都存在巨大风险&#xff…

Explain各个字段的含义

文章目录[TOC]1:expanin的结果示例2:各个字段的含义(1):id(2):select_type(3):table(4):type&#xff08;重要 我们利用索引查找出来的记录显示&#xff09;(5): possible_keys(6):key(7):key_len(8):ref(8):rows(重要)(9):extra1:expanin的结果示例 mysql> explain select…

asp.net core监控—引入Prometheus(三)

上一篇博文中说到Prometheus有四种指标类型&#xff1a;Counter&#xff08;计数器&#xff09;、Gauge&#xff08;仪表盘&#xff09;、Histogram&#xff08;直方图&#xff09;、Summary&#xff08;摘要&#xff09;&#xff0c;并且我们做了一个Counter的Demo&#xff0c…

秋招日常(一天三封感谢信)

就离谱 上午收到两封 搞得复习贼没心态 下午打完球回来一看手机又收到一封 这个有点伤 自己测评完 笔试 笔试完 约面 技术面过了 hr又面 面完说等消息 我寻思hr面能有啥可挂的 就离谱 一想到自己经过那么多轮 还是挂了 就难受 什么鬼 求求了 给个offer吧 要不我快成了天天向下的…

asp.net core监控—引入Prometheus(一)

Prometheus是CNCF毕业的第二个项目&#xff0c;算是明星产品&#xff08;可自行了解Prometheus的功能&#xff09;&#xff0c;asp.net core当然不能错过与之配套使用。在.net中是通过prometheus.net【https://github.com/prometheus-net/prometheus-net】引入的。上图是用Prom…

渣渣双非秋招以来第一份offer

一:10月25日投递 boss上进行投递 二&#xff1a;10月27一面 1:在项目当中中如何运用的线程池2:运用线程池的话可以解决什么问题3:项目当中那些部分是运用了一些异步的操作4:项目当中那些部分是运用了一些异步的操作5:java并发编程 信号量 。。。6.JDK中有无安全的ArrayList&…

1024福利 | .NET社区联合清华大学出版社送好书来啦!

话不多说&#xff0c;直入主题。.NET社区各大公众号联合清华大学出版社为粉丝送上1024的福利&#xff0c;还请诸位笑纳&#xff01;&#xff01;&#xff01;有哪些书呢&#xff1f;.NET并发编程实战 作者&#xff1a;[美] 里卡尔多特雷尔&#xff08;Riccardo Terrell&#xf…

asp.net core监控—引入Prometheus(二)

上一篇博文中&#xff0c;说明了怎么引进Prometheus到asp.net core项目中&#xff0c;因为是Demo&#xff0c;所以Prometheus和Grafana都是windows版本&#xff0c;本地执行的&#xff0c;生产环境上这些服务可以根据的公司的架构&#xff0c;放到适合的环境内&#xff0c;现在…

PTA 数据结构与算法题目集(中文)

一&#xff1a;数据结构与算法题目&#xff08;中文版&#xff09; 7-2 一元多项式的乘法与加法运算 (20 分) 7-3 树的同构 (25 分) 7-4 是否同一棵二叉搜索树 (25 分) 7-6 列出连通集 (25 分)(详解) 7-7 六度空间 (30 分) 7-8 哈利波特的考试 (25 分) 7-14 电话聊天狂人 (25 …

ASP.NET Core Blazor Webassembly 之 渐进式应用(PWA)

Blazor支持渐进式应用开发也就是PWA。使用PWA模式可以使得web应用有原生应用般的体验。什么是PWAPWA应用是指那些使用指定技术和标准模式来开发的web应用&#xff0c;这将同时赋予它们web应用和原生应用的特性。例如&#xff0c;web应用更加易于发现——相比于安装应用&#xf…

TCP三次握手(详解)

一&#xff1a;引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西&#xff1b;由于TCP不存在连接的概念&#xff0c;只存在请求和响应&#xff0c;请求和响应都是数据包&#xff0c;它们之间都是经过由TCP创建的一个从客户端发起&#xf…

进击吧! Blazor !第五期 安全

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

有一种无耻叫 “我是为你着想”

这是头哥侃码的第221篇原创十一之后&#xff0c;我的状态一直不好&#xff0c;总感觉胸口有东西堵着&#xff0c;时不时还会觉得呼吸困难。上周末&#xff0c;我咨询了几位有医学背景的朋友&#xff0c;有说是因为季节转换而造成的身体不适&#xff0c;不用在意&#xff0c;但也…

ASP.NET Core托管运行Quartz.NET作业调度详解

Quartz.NET这么NB的作业调度系统&#xff0c;不会还行&#xff1f;今天介绍一下Quartz.NET的托管运行&#xff0c;官网传送门。一、前言Quartz.NET&#xff0c;按官网上的说法&#xff0c;是一款功能齐全的任务调度系统&#xff0c;从小型应用到大型企业级系统都能适用。在众多…

asp.net core监控—引入Prometheus(四)

上一篇博文中说到Prometheus有四种指标类型&#xff1a;Counter&#xff08;计数器&#xff09;、Gauge&#xff08;仪表盘&#xff09;、Histogram&#xff08;直方图&#xff09;、Summary&#xff08;摘要&#xff09;&#xff0c;并且我们做了一个Counter的Demo&#xff0c…

[开源] .Net ORM FreeSql 1.10.0 稳步向前

写在开头FreeSql 是 .NET 开源生态下的 ORM 轮子&#xff0c;转眼快两年了&#xff0c;说真的开源不容易&#xff08;只有经历过才明白&#xff09;。今天带点干货和湿货给大家&#xff0c;先说下湿货。认识我的人&#xff0c;知道 CSRedisCore 是我写的另外一个开源组件&#…

CAP-微服务间通信实践

微服务间通信常见的两种方式由于微服务架构慢慢被更多人使用后&#xff0c;迎面而来的问题是如何做好微服务间通信的方案。我们先分析下目前最常用的两种服务间通信方案。gRPC&#xff08;rpc远程调用&#xff09;gRPC-微服务间通信实践场景&#xff1a;A服务主动发起请求到B服…