c#中的特性
c#中的特性
特性在我的理解就是在类或者方法或者参数上加上指定的标记,然后实现指定的效果。
和Java中的注解@Annotation类似。
c#内置的特性之Obsolete
[Obsolete("过期了")]
public static void Test()
{
Console.WriteLine("Test");
}

[Obsolete("过期了",true)]
public static void Test()
{
Console.WriteLine("Test");
}

c#内置的特性之Conditional
使用方法如下
[Conditional("IsTest")]
public void Test()
{
Console.WriteLine("Test");
}

意思是如果定义了宏IsTest则对Test的调用会成功,如果未定义,则该方法的调用不会成功。注意:此时虽然调用不会成功,但是仍然会被编译到程序集中。
c#内置的特性之CallerFilePath,CallerLineNumber,CallerMemberName
这三个特性可以获取调用的所在文件,行数,以及方法名称。猛一看没什么用,但是在打log的时候我觉得还是非常有用的。
static void PrintOut(string message,[CallerFilePath] string fileName="",[CallerLineNumber] int lineNumber=0,[CallerMemberName] string methodName="")
{
Console.WriteLine("message:"+message);
Console.WriteLine("fileName:" + fileName);
Console.WriteLine("lineNumber:" + lineNumber);
Console.WriteLine("methodName:" + methodName);
}
c#内置特性之DebuggerStepThrough,加在方法上
调试的时候假如那个方法确定无误,加上这个特性,调试的时候可以跳过debug的单步调试
c#中自定义一个特性以及获取该特性的属性
定义一个特性
[AttributeUsage(AttributeTargets.Class)] //特性的应用范围
public class MyTestAttribute : System.Attribute
{
public string Description { get; set; }
public string VersionNumber { get; set; }
public int ID { get; set; }
}
将该特性加在类上,这里的特性会自动把Attribute尾去掉
[MyTest(Description = "aaa",ID = 1,VersionNumber = "3")]
public class Program
{
...
}
获取特性的属性
Program p = new Program();
MyTestAttribute attribute = (MyTestAttribute) p.GetType().GetCustomAttribute(typeof (MyTestAttribute)) ;
Console.WriteLine(attribute.Description);
很多用过spring的道友肯定知道注解在Java中的用法,特性在c#中的用法和在Java中是一样的。有时间我会用c#的特性实现一个简单的spring容器,来实现控制反转。以前用java实现过,但是不知道代码扔到哪里去了。还用java实现过简单的orm。代码也不知道扔到哪里去了!!所以一定要整理代码,整理总结!!!
作者:六道真君
链接:http://www.jianshu.com/p/93d0b99b52ac
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
c#中的特性的更多相关文章
- C#中的 特性 详解(转载)
本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...
- java 对象的this使用 java方法中参数传递特性 方法的递归
一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或 ...
- .net中的特性
本文来之:http://hi.baidu.com/sanlng/item/afa31eed0a383e0e570f1d3e 在一般的应用中,特性(Attribute,以称为属性)好像被使用的不是很多. ...
- Performance Tuning guide 翻译 || Performance Tuning Guide 11G中新增特性
CSDN 对格式支持比較弱.能够到http://user.qzone.qq.com/88285879/blog/1399382878 看一致的内容. Performance Tuning Guide ...
- C#中的特性 (Attribute) 入门 (二)
C#中的特性 (Attribute) 入门 (二) 接下来我们要自己定义我们自己的特性,通过我们自己定义的特性来描述我们的代码. 自定义特性 所有的自定义特性都应该继承或者间接的继承自Attribut ...
- C#中的特性 (Attribute) 入门 (一)
C#中的特性 (Attribute) 入门 (一) 饮水思源 http://www.cnblogs.com/Wind-Eagle/archive/2008/12/10/1351746.html htt ...
- Lithium中关键特性更新
Lithium中关键特性更新 1. Lithium特性更新概述 Lithium相对于Helium更新特性共27项,其中原有特性提升或增强13项,新增特性14项,如下表所示 特性类型 相对于Helium ...
- PHP中面向对象特性实现
PHP近些年来成为全球最流行的网页编程语言,该语言以弱类型.易兼容.门槛低.开发快.功能强著称,且听别人这么说,我在有了c和c#基础后学习PHP过程中也并不是很顺利,该语言的一些特殊的语法规则又是让我 ...
- PHP中Trait特性
Trait是自 PHP 5.4.0 起添加的一个新特性,是 PHP 多重继承的一种解决方案.例如,需要同时继承两个 Abstract Class, 这将会是件很麻烦的事情,Trait 就是为了解决这个 ...
随机推荐
- ffmpeg遇到inttypes.h和UINT64_C
http://blog.csdn.net/cll131421/article/details/7763657 编译过程:错误一:无法打开包括文件:“inttypes.h”: No such file ...
- BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典:dp【删字符最少】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1633 题意: 给你一个长度为n的主串a,和一个有m个字符串s[i]的单词书(s[i].si ...
- 清理html中空白符/空格/换行在行内元素中产生的间距
问题:行内元素之间产生间隔 原因:换行符,Tab制表符,空格产生间隔 解决方法: 1.行内元素写成一行 2.设置font-size为0px 把父级文本设置为0px; 再为需要显示文字的行内元素设置文字 ...
- CodeForces - 762E:Radio stations (CDQ分治||排序二分)
In the lattice points of the coordinate line there are n radio stations, the i-th of which is descri ...
- 「LuoguP1220」 关路灯(区间dp
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- myeclipse配置
windows->preference->MyEclipse->servers->tomcat 选项下 Tomcat 6.x 点 enable 设置tomcat directo ...
- EasyUI 下载与引用
1.官网下载地址: http://www.jeasyui.com/download/index.php 一般下载 “GPL Edition” (开源版本). 2.目录结构: demo:案例,可以删 l ...
- c++的const总结(转)
为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...
- myeclipse 去掉spring特性支持
myeclipse10.0 去掉spring支持 手工修改工程目录下的.project文件中相关的内容 删除<nature>com.genuitec.eclipse.springfram ...
- git如何做个人构建
1 基本概念 1.1 Git:Git是一个版本控制的工具,类似于svn. 1.2 Gerrit:Gerrit是一个基于git的团队合作的工具,开发人员可以往上面提交代码, ...