初始C#中的Attribute类

最近做项目过程中遇到了这个类,查了下MSDN,是这么说的。

Attribute类:表示自定义属性的基类。

看到了就有点蒙圈了,这到底是用来干什么的呢?

Attribute类

从网上查了一些资料后,就有点明白了,都说它就好比是一个附着物,用来定义额外的信息。举个例子说一下吧!我们做程序开发的时候,如何确定方法是谁开发的?当然你可以在方法上添加注释,用来表明这个方法是谁敲的,除此之外呢?还有其他方法吗?

这时这个类就派上用场了。通过继承此类,可以自定义一个属性类,然后附加的形式来为需要添加的类或者方法添加额外的属性。

Demo展示

<span style="font-family:SimSun;font-size:18px;"> /// <summary>
    /// 自定义额外属性的类
    /// </summary>
    class ClassAttribute : Attribute
    {
        private string name { set; get; }
        public ClassAttribute(string Name)
        {
            this.name = Name;
        }
    }</span>

上面就是自定义额外属性的类,那么如何利用呢?

<span style="font-family:SimSun;font-size:18px;">  [Class("学生类",Age=12)]
    class Student  ///默认第一个不赋值的为构造函数类型的赋值,走的是构造函数
    {
        [Class("Football")]
        public string profession;
        public string Profession
        {
            get { return profession; }
            set { profession = value; }
        }
    }</span>

就是这么简单通过打标签的形式,就可以为类、接口、方法等添加额外的属性。

那么这时候,你可能会问,我已经添加了,那么如何来读取我添加的额外的属性呢?

Attribute类有20多个GetCustomAttribute的方法,通过这个方法就可以读取定义的额外的属性。

<span style="font-family:SimSun;font-size:18px;"> static void Main(string[] args)
        {

            //使用反射读取Attribute
            System.Reflection.MemberInfo info = typeof(Student); //通过反射得到Student类的信息
            ClassAttribute hobbyAttr = (ClassAttribute)Attribute.GetCustomAttribute(info, typeof(ClassAttribute));
            if (hobbyAttr != null)
            {
                Console.WriteLine("学生年龄:{0}", hobbyAttr.Age);

            }

        }</span>

上面就是通过调用GetCustomAttribute的方法来读取自定义的额外的属性操作。下面来用一张图来总结一下。

小结

大家可以试想一下,从宏观上知道了此类的作用,以后那些地方可以用到,用起来更方便简洁。



时间: 2024-08-25 10:47:54

初始C#中的Attribute类的相关文章

浅析C#中的Attribute

1.什么是Attribute? 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.您可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的. 特性(Attribute)用于添加元数据,如编译器指令和注释.描述.方法.类等其他信息..Net 框架提供了两种类型的特性:预定义特性和自定义特性. 规定特性(Attribute) 规定特性(Attribute)的语法如下: [attr

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称

C#中的Attribute属性

在C#中,attribute是作为一种程序源代码的元素修饰符存在的,因为有的时候我们需要给自己的代码添加一些描述性的说明信息.当这些我们不愿意用注释或内部代码用来描述的信息,被作为attribute代码而编译的话,编译器会将它们生成到metadata中去. 同时,attribute也是一种object. 1 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method |  2 AttributeTargets.ReturnVa

[转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)

这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但能否导出类应该也不是必须用MFC才能够做到,一定是有相应的机制可以实现.于是查了一下MSDN,发现这个机制简单的可怕,原来就和导出函数一样,把dllexport关键字加到类名前就可以了.估计和我一样的同学大有人在,把MSDN的相关文档翻译出来,附上我的注解,希望对大家有用. 评注程序均在Visual S

Unity中使用Attribute

Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-defined custom information with a target element. A target element can be an assembly, class, constructor, delegate, enum, event field,interface, method,

深刻理解Python中的元类(metaclass)以及元类实现单例模式

深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例模式的那一节有些疑惑.因此花了几天时间研究下元类这个概念.通过学习元类,我对python的面向对象有了更加深入的了解.这里将一篇写的非常好的文章基本照搬过来吧,这是一篇在Stack overflow上很热的帖子,我看http://blog.jobbole.com/21351/这篇博客对其进行了翻译. 一.理解

关于C# 中的Attribute 特性

摘要:纠结地说,这应该算是一篇关于Attribute 的笔记,其中的一些思路和代码借鉴了他人的文笔(见本文底部链接).但是,由于此文对Attribute 的讲解实在是叫好(自夸一下 ^_^),所以公之于众,希望能对大家有所帮助. Attribute与Property 的翻译区别 Attribute 一般译作"特性",Property 仍然译为"属性". Attribute 是什么 Attribute 是一种可由用户自由定义的修饰符(Modifier),可以用来修饰各

浅析C#中的Attribute[转]

首先贴出原文作者和地址,以表示感谢. 原文作者:hyddd 原文地址:http://www.cnblogs.com/hyddd/ 正文: 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAttribute [AttributeUsage(AttributeTargets.Class)] public class VersionAttribute : Attribute { public string Name { get; set; } publ

C++中的string类

C++中的string类1)是什么:专门的字符串操作的一个类,非常强大,字符串CString,QString2)跟char *的区别Char *是指向字符数组首地址的指针,然后我们系统提供一个string.h,这个头文件声明了很所字符串操作函数,strlen.strcat.strcmp.strcpy--.Stirng这个类,我们使用的时候不用考虑内存非配与释放,不用担心越界,因为前辈在封装string的时候,已经把几乎所有的情况都考虑到了,3)学习方法,学会查找三种方式:MSDN.工具书.百度4