请选择 进入手机版 | 继续访问电脑版

[C#教程] C# AttributeUsage使用 案例详解

[复制链接]
查看192 | 回复43 | 2021-9-14 09:06:24 | 显示全部楼层 |阅读模式

C# AttributeUsage的使用 是怎样 的呢?起首 让我们来相识 一下什么是AttributeUsage类它是别的 一个预定义特性类,AttributeUsage类的作用就是帮助我们控订定 制特性的使用 。实在 AttributeUsage类就是形貌 了一个定制特性如和被使用 。

  C# AttributeUsage的使用 要明白 :

  AttributeUsage有三个属性,我们可以把它放置在定制属性前面。

  • ValidOn
    通过这个属性,我们可以或许 定义定制特性应该在何种程序实体前放置。一个属性可以被放置的全部 程序实体在AttributeTargets enumerator中列出。通过OR操作我们可以把多少 个AttributeTargets值组合起来。
  •  AllowMultiple
    这个属性标记了我们的定制特性能否 被重复放置在同一个程序实体前多次。
  • Inherited
    我们可以使用 这个属性来控订定 制特性的继承规则。它标记了我们的特性能否 被继承。

  C# AttributeUsage的使用 实例:

  下面让我们来做一些现实 的东西。我们将会在刚才的Help特性前放置AttributeUsage特性以等待 在它的帮助下控制Help特性的使用 。

  1. using System;
  2. [AttributeUsage(AttributeTargets.Class), AllowMultiple = false, Inherited = false ]
  3. public class HelpAttribute : Attribute
  4. {
  5. public HelpAttribute(String Description_in)
  6. {
  7. this.description = Description_in;
  8. }
  9. protected String description;
  10. public String Description {
  11. get {
  12. return this.description;
  13. }
  14. }
  15. }
复制代码

先让我们来看一下AttributeTargets.Class。它规定了Help特性只能被放在class的前面。这也就意味着下面的代码将会产生错误:

  1. [Help("this is a do-nothing class")]
  2. public class AnyClass
  3. {
  4. [Help("this is a do-nothing method")] //error
  5. public void AnyMethod()
  6. {
  7. }
  8. }
复制代码

编译器报告错误如下:

  1. AnyClass.cs: Attribute ‘Help' is not valid on this declaration type.
  2. It is valid on ‘class' declarations only.
  3. 我们可以使用AttributeTargets.All来允许Help特性被放置在任何程序实体前。可能的值是:
复制代码
  1. Assembly,
  2.   Module,
  3.   Class,
  4.   Struct,
  5.   Enum,
  6.   Constructor,
  7.   Method,
  8.   Property,
  9.   Field,
  10.   Event,
  11.   Interface,
  12.   Parameter,
  13.   Delegate,
  14.   All = Assembly | Module | Class |
  15.   Struct | Enum | Constructor |
  16.   Method | Property | Field | Event |
  17.   Interface | Parameter | Delegate,
  18.   ClassMembers = Class | Struct | Enum |
  19.    Constructor | Method | Property | Field |
  20.    Event | Delegate | Interface )
复制代码

下面思量 一下AllowMultiple = false。它规定了特性不能被重复放置多次。

  1. [Help("this is a do-nothing class")]
  2. [Help("it contains a do-nothing method")]
  3. public class AnyClass
  4. {
  5. [Help("this is a do-nothing method")] //error
  6. public void AnyMethod()
  7. {
  8. }
  9. }
复制代码

它产生了一个编译期错误。

AnyClass.cs: Duplicate ‘Help' attribute
Ok,如今 我们来讨论一下末了 的这个属性。Inherited, 表明当特性被放置在一个基类上时,它能否 被派生类所继承。

  1. [Help("BaseClass")]
  2. public class Base
  3. {
  4. }
  5.   
  6. public class Derive : Base
  7. {
  8. }
复制代码

C# AttributeUsage的使用 会有四种大概 的组合:

  1. [Help("BaseClass")]
  2. public class Base
  3. {
  4. }
  5.   
  6. public class Derive : Base
  7. {
  8. }
复制代码

  C# AttributeUsage的使用 第一种环境 :

  假如 我们查询(Query)(稍后我们会看到怎样 在运行期查询一个类的特性)Derive类,我们将会发现Help特性并不存在,由于 inherited属性被设置为false。

  C# AttributeUsage的使用 第二种环境 :

  和第一种环境 雷同 ,由于 inherited也被设置为false。

  C# AttributeUsage的使用 第三种环境 :

  为相识 释第三种和第四种环境 ,我们先来给派生类添加点代码:

  1. [Help("BaseClass")]
  2. public class Base
  3. {
  4. }
  5. [Help("DeriveClass")]
  6. public class Derive : Base
  7. {
  8. }
复制代码

  如今 我们来查询一下Help特性,我们只能得到派生类的属性,由于 inherited被设置为true,但是AllowMultiple却被设置为false。因此基类的Help特性被派生类Help特性覆盖了。

  C# AttributeUsage的使用 第四种环境 :

  在这里,我们将会发现派生类既有基类的Help特性,也有本身 的Help特性,由于 AllowMultiple被设置为true。

  C# AttributeUsage的相干 内容就向你先容 到这里,渴望 对你相识 和把握 C# AttributeUsage的使用 有所帮助。

到此这篇关于C# AttributeUsage使用 案例详解的文章就先容 到这了,更多相干 C# AttributeUsage使用 内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 下一个秋天1 | 2021-9-18 20:08:01 | 显示全部楼层
很有品味!
回复

使用道具 举报

avatar 王枫13898316786 | 2021-9-20 17:34:59 | 显示全部楼层
admin楼主给脑残下了定义!
回复

使用道具 举报

avatar 天八部饶gc | 2021-9-21 10:40:57 | 显示全部楼层
admin楼主的帖子越来越有深度了!
回复

使用道具 举报

avatar 123457125 | 2021-10-7 22:19:30 | 显示全部楼层
不错的帖子,值得收藏!
回复

使用道具 举报

avatar 老庞208 | 2021-10-8 10:49:01 | 显示全部楼层
内容很有深度!
回复

使用道具 举报

avatar 右脸破相gl | 2021-10-17 12:07:21 | 显示全部楼层
楼上的说的很好!
回复

使用道具 举报

avatar xiongjiuhe101 | 2021-10-17 23:25:53 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,影视频道的网站所有电影和连续剧都可以免费看的。访问地址:http://tv.mxswl.com
回复

使用道具 举报

avatar fck1956272 | 2021-10-19 01:39:28 | 显示全部楼层
吹牛的人越来越多了!
回复

使用道具 举报

avatar 简0 | 7 天前 | 显示全部楼层
终于看完了,很不错!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则