本文摘自PHP中文网,作者黄舟,侵删。

假设现在有一个学生类(Student)
1 2 3 4 5 6 7 8 9 |
|
如果需要判断某些字段(属性)是否为空,是否大于0,便有以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
这样的代码,重用性不高,而且效率低。
我们可以用特性,反射,然后遍历属性并检查特性。
首先自定义一个【必填】特性类,继承自Attribute
1 2 3 4 5 6 7 8 9 10 11 12 |
|
然后用这个自定义的特性标记学生类的成员属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
通过特性检查类的属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
执行验证:
1 2 3 4 5 6 7 8 |
|
结果输出:
有人会发现,Sex也标记了[Require(true)],为什么没有验证信息,这是因为,Sex没有实现属性{ get; set; },GetProperties是获取不到的
以上就是C#中使用反射以及特性简化的实例代码的详细内容!
相关阅读 >>
c#如何使用libusbdotnet实现usb通信的示例详解
更多相关阅读请进入《csharp》频道 >>

C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。