『 再看.NET7』看看required属性有什么不同
还是先看看C#中属性的这定义,在初始化和访问上有哪些方式,就能看出required属性有什么不一样的地方了。
属性,是封装字段的,通过get和set访问器可以很好地验证数据的有效性。
public record Order_00
{public Guid Id { get; set; }private string? _orderNo;public string? OrderNo{get => _orderNo;set{if (!string.IsNullOrEmpty(value) && value.Length >= 8){_orderNo = value;}else{throw new ApplicationException("OrderNo is error");}}}public DateTime OrderDate { get; set; }
}
属性差异访问修饰符,如下面代码,当把Id的set定义成private后,只能在Order_01内访问到,构造也好,内部方法也好,默认值也好,都可以赋值操作,更可以验证。
public record Order_01
{public Order_01(){Id = Guid.NewGuid();}public void SetID(Guid id){Id = id;}public Guid Id { get; private set; } = Guid.NewGuid();public string? OrderNo { get; set; }public DateTime OrderDate { get; set; }
}
属性初始化,通过把set换成init,该属性就变成了只能在类型初始化时赋值,如下代码,不能在内部方法中赋值,更不能在外部赋值。
public record Order_02
{public Order_02(){Id = Guid.NewGuid();}//public void SetID(Guid id)//{// Id = id;//}public Guid Id { get; init; } = Guid.NewGuid();public string? OrderNo { get; set; }public DateTime OrderDate { get; set; }
}
必填属性,当给属性添加required时,最大的区别在于,实例化对象时,需要给这两个属性赋值,之前如果遇到这种需求,通常是在构造函数中,定义两个参数,以达到实例化完后,就有初始值。
var order_0N_b = new Order_0N { Id = Guid.NewGuid(),OrderNo="N2022098813594" };
Console.WriteLine(order_0N_b);public record Order_0N
{public Order_0N(){Id = Guid.NewGuid();}//因为Id是init,所以不能在内部方法赋值//public void SetID(Guid id)//{// Id = id;//}public void SetOrderNo(string no){OrderNo = no;}public required Guid Id { get; init; } = Guid.NewGuid();public required string? OrderNo { get; set; }public DateTime OrderDate { get; set; }
}
如果在构造中传必填值 ,在反射时,可以在调用构造方法时,给Invoke传参数,但用required时,该怎么传值呢?肯定不是构造,其实,当普通属性一样赋值就可以,代码如下:
var orderType = typeof(Order_0N);
var orderObj = orderType.GetConstructor(new Type[0])?.Invoke(null);
var idPro = orderType.GetProperty("Id");
idPro?.SetValue(orderObj, Guid.NewGuid());
var noPro = orderType.GetProperty("OrderNo");
noPro?.SetValue(orderObj, "N12345678");
Console.WriteLine(orderObj);
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全
『 再看.NET7』看看required属性有什么不同相关推荐
- 『HTML5挑战经典』是英雄就下100层-开源讲座(二)危险!英雄
本篇为<『HTML5挑战经典』是英雄就下100层-开源讲座>第二篇,需要用到开源引擎lufylegend,可以到这里下载: 下载地址:http://lufylegend.googlecod ...
- 太干了!大俠『云飞杨』带你走进GFX!
我是『云飞扬』 Cocos论坛昵称『大风起兮云飞扬』 Cocos引擎忠实用户 Cocos2d-x.Cocos Creator.Cocos Creator 3D系列 都在项目中使用过 有Cocos论坛强 ...
- iOS多线程:『NSOperation、NSOperationQueue』详尽总结
2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...
- 【NLP】万字长文带你解读『虚假新闻检测』最新进展
NewBeeNLP原创出品 公众号专栏作者 @byn blog | https://blog.csdn.net/byn12345 互联网时代,假新闻铺天盖地,而且极具迷惑性,因此假新闻检测任务对逻辑的 ...
- 游戏总监“姐夫”今日离开暴雪,玩家却欢乐地吃着『暴雪要凉』的瓜
来源|蚕豆网 ID|candouwang 作者|蚕豆君 今天凌晨,<守望先锋>游戏总监「Jeff Kaplan」(人称"姐夫")正式宣布从暴雪离职. Jeff Kapl ...
- 『力荐汇总』这些 VS Code 快捷键太好用,忍不住录了这34张gif动图
之前写过三篇文章,收获了极其不错的阅读量与转发量: 你真的会用 VS Code 的 Ctrl.Shift和Alt吗?高效易用的快捷键:多光标.跳转引用等轻松搞定 VS Code 中的 Vim 操作 | ...
- 『论文复现系列』3.Glove
★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 『论文复现系列』3.Glove Glove 论文 | Global Vectors for Wor ...
- [日推荐]『质安查』买到放心的产品就靠它了
2019独角兽企业重金招聘Python工程师标准>>> 喜欢买买买的小伙伴们一定都会担忧一个问题--产品是否合格.会不会买到假货? 有没有方便又可靠的质量检测工具能够解决这个问题呢? ...
- matlab 莫比乌斯曲面,『Rhino实例.2』莫比乌斯曲面
原标题:『Rhino实例.2』莫比乌斯曲面 关于莫比乌斯环状曲面连续性的问题,在对接位置存在不连续的问题:如下图所示 Dixon给出的解答如下: 1.首先必须知道,曲面如果要对接,那么必须要求uv要能 ...
- AI视频插帧 附带『视频插帧』工具
AI视频插帧 附带『视频插帧』工具 视频插帧工具来啦! 下载链接在最下面. 前言 继视频抠图工具以来,本人又考虑制作一款视频插帧的工具,最近一直在改各种问题(头都大了- _ -),还好该来的终于来了( ...
最新文章
- MFC中设备描述表dc的使用
- telnet检查接收邮件命令
- 【Java源码分析】Vector源码分析
- LeetCode Length of Last Word(最后一个单词的长度)
- jquery的checked以及disabled
- Python(9):函数
- PlayFrameWork实现文件上传,完整流程
- C#反射——模仿BeanUtil属性复制
- 【转】VB中NEW的用法(申请内存空间)
- 一种类型安全的Java HTTP客户端库Retrofit
- Mobileye技术与市场走势
- 资江小票打印机js实现web打印(web通用打印)
- 车牌号识别 python + opencv
- idea 设置字体大小
- 读后感系列3:《人类简史》尤瓦尔·赫拉利(一)
- 音频处理—SOX音效
- word一打字就有下划线_word下划线上怎么打字 不破坏下滑线技巧
- python太极代码_Python : Turtle绘图-太极图(代码)
- 云服务器与物理服务器各自的优势
- vue3使用富文本编辑器wangEditor-v5(未使用composition api写法)