还是先看看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属性有什么不同相关推荐

  1. 『HTML5挑战经典』是英雄就下100层-开源讲座(二)危险!英雄

    本篇为<『HTML5挑战经典』是英雄就下100层-开源讲座>第二篇,需要用到开源引擎lufylegend,可以到这里下载: 下载地址:http://lufylegend.googlecod ...

  2. 太干了!大俠『云飞杨』带你走进GFX!

    我是『云飞扬』 Cocos论坛昵称『大风起兮云飞扬』 Cocos引擎忠实用户 Cocos2d-x.Cocos Creator.Cocos Creator 3D系列 都在项目中使用过 有Cocos论坛强 ...

  3. iOS多线程:『NSOperation、NSOperationQueue』详尽总结

    2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...

  4. 【NLP】万字长文带你解读『虚假新闻检测』最新进展

    NewBeeNLP原创出品 公众号专栏作者 @byn blog | https://blog.csdn.net/byn12345 互联网时代,假新闻铺天盖地,而且极具迷惑性,因此假新闻检测任务对逻辑的 ...

  5. 游戏总监“姐夫”今日离开暴雪,玩家却欢乐地吃着『暴雪要凉』的瓜

    来源|蚕豆网 ID|candouwang 作者|蚕豆君 今天凌晨,<守望先锋>游戏总监「Jeff Kaplan」(人称"姐夫")正式宣布从暴雪离职. Jeff Kapl ...

  6. 『力荐汇总』这些 VS Code 快捷键太好用,忍不住录了这34张gif动图

    之前写过三篇文章,收获了极其不错的阅读量与转发量: 你真的会用 VS Code 的 Ctrl.Shift和Alt吗?高效易用的快捷键:多光标.跳转引用等轻松搞定 VS Code 中的 Vim 操作 | ...

  7. 『论文复现系列』3.Glove

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 『论文复现系列』3.Glove Glove 论文 | Global Vectors for Wor ...

  8. [日推荐]『质安查』买到放心的产品就靠它了

    2019独角兽企业重金招聘Python工程师标准>>> 喜欢买买买的小伙伴们一定都会担忧一个问题--产品是否合格.会不会买到假货? 有没有方便又可靠的质量检测工具能够解决这个问题呢? ...

  9. matlab 莫比乌斯曲面,『Rhino实例.2』莫比乌斯曲面

    原标题:『Rhino实例.2』莫比乌斯曲面 关于莫比乌斯环状曲面连续性的问题,在对接位置存在不连续的问题:如下图所示 Dixon给出的解答如下: 1.首先必须知道,曲面如果要对接,那么必须要求uv要能 ...

  10. AI视频插帧 附带『视频插帧』工具

    AI视频插帧 附带『视频插帧』工具 视频插帧工具来啦! 下载链接在最下面. 前言 继视频抠图工具以来,本人又考虑制作一款视频插帧的工具,最近一直在改各种问题(头都大了- _ -),还好该来的终于来了( ...

最新文章

  1. MFC中设备描述表dc的使用
  2. telnet检查接收邮件命令
  3. 【Java源码分析】Vector源码分析
  4. LeetCode Length of Last Word(最后一个单词的长度)
  5. jquery的checked以及disabled
  6. Python(9):函数
  7. PlayFrameWork实现文件上传,完整流程
  8. C#反射——模仿BeanUtil属性复制
  9. 【转】VB中NEW的用法(申请内存空间)
  10. 一种类型安全的Java HTTP客户端库Retrofit
  11. Mobileye技术与市场走势
  12. 资江小票打印机js实现web打印(web通用打印)
  13. 车牌号识别 python + opencv
  14. idea 设置字体大小
  15. 读后感系列3:《人类简史》尤瓦尔·赫拉利(一)
  16. 音频处理—SOX音效
  17. word一打字就有下划线_word下划线上怎么打字 不破坏下滑线技巧
  18. python太极代码_Python : Turtle绘图-太极图(代码)
  19. 云服务器与物理服务器各自的优势
  20. vue3使用富文本编辑器wangEditor-v5(未使用composition api写法)

热门文章

  1. 完全不用递归解汉诺塔(65个盘子——VC6代码)
  2. 微软bi报表服务器,什么是 Power BI 报表服务器?
  3. Java随机产生两位数正整数
  4. Java单元测试之JUnit 5快速上手
  5. tablayou设置固定下划线和根据文字显示长短显示下划线
  6. 教你如何写初/高级前端简历【全新web前端入门视频教程】
  7. 初学python------写一个心理测试
  8. 下载tensorflow速度慢怎么办?
  9. 持续分化的 NFT 市场:新的金字塔正在形成
  10. html页面banner空白,css banner不拉伸