特性应该我们大多接触过,比喻经常使用的[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#特性的简单介绍的更多相关文章

  1. Tcl 简单介绍及特性

    [简单介绍|特性] l  简单介绍 Tcl是一门产生于80年代末的语言,和Python一样,她是用c开发出来的.假设说C/Java/C++/C#为编译型语言的话,那么Python.Perl和Tcl就是 ...

  2. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  3. 简单介绍Javascript匿名函数和面向对象编程

    忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...

  4. iOS开发拓展篇-XMPP简单介绍

    iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双 ...

  5. iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

    XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...

  6. Linux 内核开发—内核简单介绍

    内核简单介绍 Linux 构成 Linux 为什么被划分为系统空间和内核空间 隔离核心程序和应用程序,实现对核心程序和数据的保护. 什么内核空间,用户空间 内核空间和用户空间是程序执行的两种不同的状态 ...

  7. CMake 简单介绍 图

    http://tech.uc.cn/?p=914     CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran ...

  8. 决策树简单介绍(二) Accord.Net中决策树的实现和使用

    决策树介绍 决策树是一类机器学习算法,可以实现对数据集的分类.预测等.具体请阅读我另一篇博客(http://www.cnblogs.com/twocold/p/5424517.html). Accor ...

  9. 使用Kotlin开发Android应用(I):简单介绍

    使用Kotlin开发Android应用(I):简单介绍 @author ASCE1885的 Github 简书 微博 CSDN 原文链接 Kotlin是一门基于JVM的编程语言.它正成长为Androi ...

随机推荐

  1. 【JavaScript】富文本编辑器

    这是js写的富文本编辑器,还存在一些bug,但基本功能已经实现,通过这个练习,巩固了js富文本编辑方面的知识,里面包含颜色选择器.全屏.表情.上传图片等功能,每个功能实际对应的就是一个小插件啦 部分程 ...

  2. Controller如何写的更简化

    Controller层相当于MVC中的C,也是安卓或者前端请求的接口. 首先说Controller为什么需要写的更加简化? 第一.Controller是不能复用的: 第二.即便是将Controller ...

  3. VC++ TCP网络控制台程序

    在Windows7系统下,采用工具为VS2008,Win32控制台应用程序,编写一个基于TCP的Client/Server网络程序. 1.服务器端代码 #include <WinSock2.h& ...

  4. spring框架中beans.xml文件报错XmlBeanDefinitionStoreException

    第一次构建spring,实现简单的注入方式,就发生了beans.xml文件报错,报错信息如下图 org.springframework.beans.factory.xml.XmlBeanDefinit ...

  5. SDN测量论文粗读(三)9.24

    Jaal: Towards Network Intrusion Detection at ISP Scale 论文来源:CoNext 发表时间:2015 解决问题及所做贡献:Jaal:大规模精细网络入 ...

  6. RabbitMQ镜像队列初始化连接时的“优化”

    之前发过一篇帖子应用.Net+Consul维护RabbitMq的高可用性,然后最近老大问我当初我这么搞是抽的什么想法- -然后顺便贴了两行C#代码: var factory = new Connect ...

  7. 设置eclipse默认编码格式

    Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window->Prefere ...

  8. Java中关于Servlet中请求中文乱码及文件下载

    1,Servlet请求响应中文乱码问题 package com.demo.servlet; import java.io.PrintWriter; import java.io.IOException ...

  9. new和delete的三种形式详解

    一.new操作符.delete操作符 class String { public: String(const char *str="") { if(str== NULL) { da ...

  10. MySQL 基础小技巧

    把MySQL软件制作成系统服务 .把mysqld软件做成系统服务 注意:制作之前先把mysqld关掉 C:\Windows\system32>tasklist |findstr mysqld m ...