C#特性的简单介绍
2018-06-18 02:22:12来源:未知 阅读 ()
特性应该我们大多接触过,比喻经常使用的[Obsolete],[Serializable]等下面我就主要介绍一个特性的一些用法
摘自MSDN定义:用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。
意思就是把我们自定义的特性或者微软自带的特性和我们的代码进行组合,其实就是为我们某些代码附加一些信息
1:先看.Net带的三种特性
1.1:[Obsolete]这个预定义特性标记了不应被使用的程序实体
- 参数 message,是一个字符串,描述项目过时原因以及特带的项目。
- 参数 error,是一个布尔值。如果该值为 true,编译器应把该项目的使用当作一个错误。默认值是 false(编译器生成一个警告)。
[Obsolete("过时方法")] private static void OutModed() { Console.WriteLine("我是过时的方法"); }
然后引用的时候就出现
如果加上false我们发现在引用的使用就没法编译过去大家可以自己试验下
1.2:[Conditional]这个预定义特性指示编译器应忽略方法调用或属性,除非已定义指定的条件编译符号
- 参数 conditionString,获取与 ConditionalAttribute 属性相关的条件编译符号。
private static void Main(string[] args) { Debug(); Trace(); } [Conditional("DEBUG")] private static void Debug() { Console.WriteLine("我是debug"); } [Conditional("TRACE")] public static void Trace() { Console.WriteLine("我是TRACE"); }
当调试成trace模式的时候只能结果:
1.3:[AttributeUsage]描述了如何使用一个自定义特性类。并加上限制
- 参数AttributeTargets 指定可以对它们应用特性的应用程序元素
- 参数allowMultiple 指示该特性是单用还是多用 默认false
- 参数inherited是否可以继续 默认true
创建一个自定义特性
[AttributeUsage(AttributeTargets.Method)] public class CustomAttribute:Attribute { public string Name { get; set; } public CustomAttribute(string name) { Name = name; } }
上面的限制是只能用于方法
[Custom()]//报错 internal class Program { private static void Main(string[] args) { }
allowMultiple = false。它规定了特性不能被重复放置多次所以下面代码会报错
[Custom("1")] //报错 [Custom("2")] public void Method() { }
2:自定义特性
先定义一个特性类
[AttributeUsage(AttributeTargets.All,AllowMultiple = true,Inherited = false)] public class CustomAttribute:Attribute { public string Name { get; set; } public int Age { get; set; } public CustomAttribute(string name,int age) { Name = name; Age = age; } }
然后定义一个基类
[Custom("张三", 3)] public class Base { public static void Method() { Console.WriteLine("我具有一个特性"); } }
public static void GetAttributeInfo(Type t) { var myattribute = (CustomAttribute)Attribute.GetCustomAttribute(t, typeof(CustomAttribute)); if (myattribute!=null) { Console.WriteLine("姓名:{0}\n年龄:{1}", myattribute.Name, myattribute.Age); } }
调用
GetAttributeInfo(typeof(Base));
public class Base { [Custom("张三", 3)]//方法上 public static void Method() { Console.WriteLine("我具有一个特性"); } }
就改变t的写法:t.GetMethod("Method")这样来获取特性运行效果一样
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:简单三层复习
- 加边的无向图--并查集 2020-04-10
- 排兵布阵 2020-02-21
- 二叉树(四)二叉堆 2020-02-03
- 一款简单的C++猜数字游戏(新手必学) 2019-12-10
- 详细介绍软件架构设计的三个维度 2019-11-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash