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 ...
随机推荐
- selenium + python自动化测试unittest框架学习(三)webdriver对页面其他控件操作(三)
1.对话框,下拉框 (1)对话框的有两种,一种是iframe格式的,需要switch_to_iframe()进行定位,现在大部分的对话框是div格式的,这种格式的可以通过层级定位来定位元素,先定位对话 ...
- SpringBoot实战(一)之构建RestFul风格
RestFul风格是一种非常流行的架构风格,相关实战可以参考我的这篇博客:SSM框架之RestFul示例 论文可参考:https://www.ics.uci.edu/~fielding/pubs/di ...
- Multiplication in PyTorch
1. Element-wise Multiplication * torch.Tensor.mul() torch.mul() 2. Matrix Multiplication torch.Tenso ...
- GridView 子项长度和宽度一样
下面是gridview 控件,每行放置四个,因此用宽度除4. 下面展现出来的的界面就显的比较美观. public class HotSearchAdapter extends BaseAdapter ...
- POJ 2299 Ultra-QuickSort 求逆序数 (归并或者数状数组)此题为树状数组入门题!!!
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 70674 Accepted: 26538 ...
- Apache2.4.34 + php 7.28 + MySQL8.0.12 安装及配置
服务端的学习 Apache2.4.34 的安装及配置 1.基本安装 最新的 Apache 已经不提供 Windows 的安装版本,所以我们这里使用的是解压版 -下载地址:https://www.apa ...
- [iOS]为git设置代理
查看本地git配置信息 git config --global -e 查看自己***的代理地址和端口信息 为git添加代理 git config --global http.proxy https:/ ...
- jar下载地址
java开发难免需要下载额外的jar,推荐一个地址 http://www.java2s.com/Code/Jar/CatalogJar.htm
- java 加载并读取Properties 文件
1 .系统自带的application.properties (以下代码仅供参考,不能粘贴复制) 假设application.properties文件有下面两个值: come.test.name = ...
- 关于flume的filechannel的 full 问题
事务启动以后,批量向事务Transaction的一个putList的尾部写入,putlist是一个LinkedBlockingDeque . 事务提交的时候, 把putlist中的event批量移除, ...