特性应该我们大多接触过,比喻经常使用的[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. [Python web开发] 路由实现 (三)

    一.路由 1.1 什么是路由 简单说,就是路怎么走.就是按照不同的路径分发数据. URL就是不同资源的路径,不同路径应该对应不同的应用程序来处理. 所以,代码中要增加对路径的分支处理. 一个简单的路由 ...

  2. 【问题】 cookie 不保存特殊字符 解决办法

    遇到的问题: 在做项目,用geolocation 获取经纬度,格式如(23.1133,113.2552) ,想保存到cookie中备用.但读取cookie出来之后发现逗号变成了  %2c. 找到的原因 ...

  3. windows7系统PC机耳机没有声音

    排除耳机故障和主机耳机孔等硬件问题之后 可能情况: 1.进行音量设置 2.更新声卡驱动 (使用驱动程序进行检测并进行更新) 360驱动大师 驱动精灵 3.windwows相关设置存在问题 (1)打开控 ...

  4. 通讯协议(一)HTTP协议

    协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.目前我们使 ...

  5. 【Dubbo源码阅读系列】服务暴露之本地暴露

    在上一篇文章中我们介绍 Dubbo 自定义标签解析相关内容,其中我们自定义的 XML 标签 <dubbo:service /> 会被解析为 ServiceBean 对象(传送门:Dubbo ...

  6. Android解析json数据

    Json数据 [{"code":"110000","sheng":"11","di":"0 ...

  7. plsql developer 64位 注册码

    注册码product code(产品编码): 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number(序列号):226959 password(口令): xs ...

  8. c++友元函数、友元类、友成员函数

    友元函数:不是类成员函数,是一个类外的函数,但是可以访问类所有成员. class Point{ public: friend void fun(Point t);//友元函数 private: int ...

  9. dfs板子题-Hdu1283Vegetables

    题目描述毕业后,Vegetable在一家建筑公司找到了工作.他所在的城市将要进行整修,要求把所有空地修成公园. 市区是一个N*M的矩形,Vegetable拿到了该市的地图,现在判断共要修几处公园? 注 ...

  10. 【PTA 天梯赛】L3-003 社交集群(并查集)

    当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友.一个“社交集群”是指部分兴趣爱好相同的人的集合.你需要找出所有的社交集群. 输入格式: 输入在第一行 ...