.NET简谈特性(代码属性)

简介:

由于很久没有写关于基础知识的东西了,今天来总结一下关于.NET平台中的代码属性的概念;只是基础介绍,文章的本意是带领初学者学会使用特性,而不是讨论高深的底层技术;[王清培版权所有,转载请给出署名]

1.什么叫特性Attribute

特性对一般.NET编程人员来说并不陌生,自从我们开始接触C#语言的时候,我们多多少少已经接触了关于特性的使用;但是对于初学者来说真的不明白特性的意义,特性到底是属于类还是类实例,这些概念搞不清楚对理解代码的逻辑真的很顺利;这篇文章我将带您来了解特性的作用,其实特性的真的很方便;至少我认为自从我懂特性之后,我的代码便的更加的人性化,程序的结构清晰易懂,所以本人在写代码的时候经常喜欢用一些能够简单明了的表达对象的特点的风格;

其实特性Attribute就是一段代码属性,附加在我们定义的对象上的,特性属于对象而不是实例,这个概念要注意;为什么需要特性,我想任何一个开发人员都不需要问为什么,因为它的好处我们是拍手叫绝的,好东西为什么不要呢;之所以你没感觉到是因为朋友你还没发现他的优点;我们还是拿代码例子来讲吧,这样便于我们双向交流;

2.实例代码学习

 
  1. using System;    
  2. using System.Collections.Generic;    
  3. using System.Text;    
  4. namespace AttributeTest    
  5. {    
  6.     [TableName(Name = "Tb_UserName")]    
  7.     public class M_UserName    
  8.     {    
  9.     }    
  10. }   

这段代码里,我有一个M_UserName类,在类的上面我加了一个TableName的特性,这个特性是用来标识我这个类对应着数据库表的名称,这样的应用一般都会在ORM中出现;TableName是我们自己定义的一个特性,这样的特性不能影响系统的编译行为,而系统的特性会改变代码的编译行为,这样的编译控制是有必要的,比如我们在进行.NET安全编程的时候,经常会用到SecurityPermissionAttribute特性控制代码的安全执行逻辑,操作系统的API最重要的一个作用就是权限控制,以免大家一起进入内核;如果不用特性进行标记,那么所有的方法都会被统一编译无法控制;[王清培版权所有,转载请给出署名]

我们回到TableName特性,特性是一中特殊的类型,这个类型继承自Attribute对象;

 
  1. using System;    
  2. using System.Collections.Generic;    
  3. using System.Text;    
  4. namespace AttributeTest    
  5. {    
  6.     /// <summary>    
  7.     /// 数据库表的名称    
  8.     /// </summary>    
  9.     [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]    
  10.     public class TableName : Attribute    
  11.     {    
  12.         /// <summary>    
  13.         /// 名称    
  14.         /// </summary>    
  15.         public string Name { getset; }    
  16.     }    
  17. }   

我们定义的特性还需要用系统的AttributeUsage特性进行标记,系统好将我们自己定义的特性当成特殊的类型处理;在此穿插一句,特性也是属于类类型,只不过是一种特殊的类型,这中类型是需要我们用系统特性进行说明的,这样系统在编译的时候才会将我们的特性进行元数据的区分,我们通过反射就可以把这个特殊的元数据拿到;

也许你会问,我这样标记了一个类的特性有什么用呢,当然有用,我们下面通过反射来进行动态读取对象的特性;特性属于类类型也就是属于Type,我们是通过类型获取而不是实例获取特性;

 

 
  1. using System;    
  2.  
  3. using System.Collections.Generic;    
  4. using System.Text;    
  5. using System.Reflection;    
  6. namespace AttributeTest    
  7. {    
  8.     class Program    
  9.     {    
  10.         static void Main(string[] args)    
  11.         {    
  12.             Type type = typeof(M_UserName);//通过typeof方法获取Type对象    
  13.             object[] obj = type.GetCustomAttributes(typeof(TableName), false);//通过Type对象获取指定特性    
  14.             TableName name = obj[0] as TableName;    
  15.             Console.WriteLine(name.Name);    
  16.             Console.ReadLine();    
  17.         }    
  18.     }    
  19. }   

这样我们就拿到了特性所标记的值,其实你可以把特性当成是一种静态类,当我们获取特性的时候,系统会将特性类进行加载到内存中,我不知道特性类的数据在内存中的布局是什么样的,但是对我们刚开始学习使用的时候,可以这么先理解;

总结:特性是一段代码属性,是一种特殊的类,在编译的时候以特殊的身份存在于元数据中,当我们获取它的时候,系统加载到内存中。特性属于类,不属于类实例;[王清培版权所有,转载请给出署名]




 本文转自 王清培 51CTO博客,原文链接:http://blog.51cto.com/wangqingpei557/605698,如需转载请自行联系原作者


相关文章
|
9月前
|
开发框架 .NET API
.NET 10首个预览版发布:重大改进与新特性概览!
.NET 10首个预览版发布:重大改进与新特性概览!
344 3
.NET 10首个预览版发布:重大改进与新特性概览!
|
10月前
|
人工智能 机器人
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
|
12月前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
317 13
|
开发框架 .NET PHP
ASP.NET Web Pages - 添加 Razor 代码
ASP.NET Web Pages 使用 Razor 标记添加服务器端代码,支持 C# 和 Visual Basic。Razor 语法简洁易学,类似于 ASP 和 PHP。例如,在网页中加入 `@DateTime.Now` 可以实时显示当前时间。
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
667 7
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
370 4
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
138 3
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
322 1
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
219 1
|
存储 编译器
.Net特性Attribute的高级使用
【10月更文挑战第14天】在.NET中,特性(Attribute)是一种强大的机制,用于在代码中添加元数据。本文介绍了特性的高级用法,包括自定义特性、通过反射读取特性、条件编译与特性结合、多个特性应用以及特性继承。通过示例展示了如何创建自定义特性类、应用自定义特性,并通过反射获取特性信息。此外,还介绍了如何利用条件编译符号实现不同版本的代码控制,以及如何在一个代码元素上应用多个特性。最后,探讨了如何通过`AttributeUsage`控制特性的继承行为。
284 1