C#特性的简单介绍
特性应该我们大多接触过,比喻经常使用的[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("")] //报错
        [Custom("")]
        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("张三", )]
    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("张三", )]//方法上
public static void Method()
{
Console.WriteLine("我具有一个特性");
}
}
就改变t的写法:t.GetMethod("Method")这样来获取特性运行效果一样
C#特性的简单介绍的更多相关文章
- Tcl 简单介绍及特性
		
[简单介绍|特性] l 简单介绍 Tcl是一门产生于80年代末的语言,和Python一样,她是用c开发出来的.假设说C/Java/C++/C#为编译型语言的话,那么Python.Perl和Tcl就是 ...
 - 简单介绍一下R中的几种统计分布及常用模型
		
统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...
 - 简单介绍Javascript匿名函数和面向对象编程
		
忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...
 - iOS开发拓展篇-XMPP简单介绍
		
iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双 ...
 - iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备
		
XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...
 - Linux 内核开发—内核简单介绍
		
内核简单介绍 Linux 构成 Linux 为什么被划分为系统空间和内核空间 隔离核心程序和应用程序,实现对核心程序和数据的保护. 什么内核空间,用户空间 内核空间和用户空间是程序执行的两种不同的状态 ...
 - CMake 简单介绍 图
		
http://tech.uc.cn/?p=914 CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran ...
 - 决策树简单介绍(二) Accord.Net中决策树的实现和使用
		
决策树介绍 决策树是一类机器学习算法,可以实现对数据集的分类.预测等.具体请阅读我另一篇博客(http://www.cnblogs.com/twocold/p/5424517.html). Accor ...
 - 使用Kotlin开发Android应用(I):简单介绍
		
使用Kotlin开发Android应用(I):简单介绍 @author ASCE1885的 Github 简书 微博 CSDN 原文链接 Kotlin是一门基于JVM的编程语言.它正成长为Androi ...
 
随机推荐
- 5、Spring-Cloud-声明式调用 Feign(上)
			
5.1.写一个 Feign 害户端 新建项目: 依赖: <dependency> <groupId>org.springframework.boot</groupId&g ...
 - SpringBoot实战(一)之构建RestFul风格
			
RestFul风格是一种非常流行的架构风格,相关实战可以参考我的这篇博客:SSM框架之RestFul示例 论文可参考:https://www.ics.uci.edu/~fielding/pubs/di ...
 - Java常用的异常类型
			
如上图所示:异常Exception和Error都继承自Throwable类 其中Error类代表了编译错误和系统的错误,不允许捕获 Exception代表标准java库方法所触发的异常.包括Runti ...
 - Jmeter--常见问题及解决办法
			
此文转自微信公众号:自动化性能测试 JMeter常见问题及解决方法 一.录制不到以html结尾的请求 在使用代理服务器录制脚本的时候,可能会出现html结尾的请求录制不到的问题.这是因为浏览器为了提升 ...
 - 查看apache当前并发访问数和进程数
			
1.查看apache当前并发访问数: netstat -an | grep ESTABLISHED | wc -l 对比httpd.conf中MaxClients的数字差距多少. 2.查看有多少个进程 ...
 - 国产开源JavaWeb应用程序框架——XWAF(1)
			
XWAF是一个基于java反射和Servlet 技术的国产开源Web应用程序框架.其英文全称为“eXtensible Web Application Framework”,意即“可扩展的网络应用程序框 ...
 - Notes 20180312 : String第四讲_String上的操作
			
作为一个基本的工具类,同时又是使用频率很高的类,Java为其提供了丰富的方法支持.Java中的String类中包含了50多个方法.最令人惊讶的是绝大多数方法都很有用,下面我们根据功能来分类介绍一下: ...
 - Myeclipse2014无法启动,启动十分之一自动闪退,闪退
			
现象: Myeclipse2014 无法启动 闪退 配图: 解决办法: 删掉 {workspace}/.metadata/.plugins/org.eclipse.e4.workbench/work ...
 - 触发器 of oracle
			
. 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用 ...
 - GPUImage源码解读之GLProgram
			
简述 GLProgram是GPUImage中代表openGL ES 中的program,具有glprogram功能.其实是作者对OpenGL ES program的面向对象封装 初始化 - (id)i ...