博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#中自定义属性
阅读量:7030 次
发布时间:2019-06-28

本文共 2109 字,大约阅读时间需要 7 分钟。

hot3.png

阅读目录

  一:属性

  二:自定义属性类BookAttribute实例

  . 属性是由属性类来实现的,向上篇文章《C#温故而知新学习系列之.NET框架高级特性—.NET框架中自身提供的属性(二)》我们讲的Obsolete一样,我们还可以自定义属性类,属性类是由System.Attribute派生而来的

  在C#中为了方便起见,使用自定义属性时可以省略属性名后面的Attribute,比如:下面讲到的[BookAttribute("自定义属性类")]可以改写为[Books("自定义属性类")]

  . 自定义属性类的特点

  1:使用AttributeUsage属性可以限制属性的用法

  AttributeUsage属性包含一个名为AttributeTargets的枚举可以用于指定何处使用自定义的属性,比如:指定属性仅用于类和结构[AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct)]

  2:使用AttributeUsage属性可以指定是否可以多次使用属性

  在AttributeUsage属性中通过指定AllowMultiple参数的值可以确定是否可以多次使用属性,AllowMultiple值为true表示可以多次使用属性,AllowMultiple值为false表示只能使用一次属性,比如:[AttributeUsage(AllowMultiple=true)]

  3:可以设置属性参数

  在属性类的构造函数中给出的参数列表即为属性参数

  二:自定义属性类BookAttribute实例

  1:BookAttribute.cs

  namespace CustomAttributeClass

  {
      //仅限用于类,且可以多次使用属性
      [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
      //继承自Attribute类
      class BookAttribute:Attribute
      {
          private string _bookname;//私有字段

     /// <summary>

          /// 书本名称属性
          /// </summary>
          public string BookNmae
          {
              get { return _bookname; }
              set { _bookname = value; }
          }
          //构造函数,设置属性参数
          public BookAttribute(string strBookName)
          {
              this._bookname = strBookName;
          }
      }
  }

  2:BookInfo.cs

  namespace CustomAttributeClass

  {

     //多次使用属性类

      [Book("ASP.NET深入剖析系列")]
      [Book("C#完全学习手册")]
      class BookInfo
      {
          public string bookinfo = "图书信息如下";
          //构造函数
          public BookInfo()
          {

          }

      }
  }

  3:Program.cs

     static void Main(string[] args)

        {
            BookInfo bookinfo = new BookInfo();
            object[] bookarr;//对象数组
            //获取对象类型,使用typeof方法检索当前的类类型也就是BookInfo
            MemberInfo typeinfo = typeof(BookInfo);
    //调用GetCustomAttributes方法获取与BookAttribute类有关的属性列表,该方法返回一个对象数组
            bookarr = typeinfo.GetCustomAttributes(typeof(BookAttribute), false);
            if (bookarr.GetLength(0) != 0)
            {
                BookAttribute bookattribute1 = (BookAttribute)bookarr[0];//获取属性类的第一个成员
                BookAttribute bookattribute2 = (BookAttribute)bookarr[1];//获取属性类的第一个成员
                Console.WriteLine(bookinfo.bookinfo);
                Console.WriteLine("图书名称为:" + bookattribute1.BookNmae + "—" + bookattribute2.BookNmae);
                Console.ReadKey();
            }
        }

  

  

转载于:https://my.oschina.net/fantasyTianyu/blog/597794

你可能感兴趣的文章
python3.5安装Numpy、mayploylib、opencv等额外库
查看>>
优雅绝妙的Javascript跨域问题解决方案
查看>>
Java 接口技术 Interface
查看>>
函数草稿
查看>>
织梦系统学习:文章页当前位置的写法(自认对SEO有用)
查看>>
PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)
查看>>
vue input输入框长度限制
查看>>
深入理解Java虚拟机(类加载机制)
查看>>
在500jsp错误页面获取错误信息
查看>>
iOS-CALayer遮罩效果
查看>>
为什么需要版本管理
查看>>
五、Dart 关键字
查看>>
React Native学习笔记(一)附视频教学
查看>>
记Promise得一些API
查看>>
javascript事件之调整大小(resize)事件
查看>>
20145234黄斐《Java程序设计》第六周学习总结
查看>>
【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)...
查看>>
hibernate 和 mybatis区别
查看>>
互联网广告综述之点击率特征工程
查看>>
HDU3421 Max Sum II【序列处理】
查看>>