c#中的特性

特性在我的理解就是在类或者方法或者参数上加上指定的标记,然后实现指定的效果。

和Java中的注解@Annotation类似。

c#内置的特性之Obsolete

[Obsolete("过期了")]
public static void Test()
{
Console.WriteLine("Test");
}
 
提示警告.png
[Obsolete("过期了",true)]
public static void Test()
{
Console.WriteLine("Test");
}
 
提示错误.png

c#内置的特性之Conditional

使用方法如下

[Conditional("IsTest")]
public void Test()
{
Console.WriteLine("Test");
}
 
如果没有定义IsTest宏的话,方法变成了灰色.png

意思是如果定义了宏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#中的特性的更多相关文章

  1. C#中的 特性 详解(转载)

    本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...

  2. java 对象的this使用 java方法中参数传递特性 方法的递归

    一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this  --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或 ...

  3. .net中的特性

    本文来之:http://hi.baidu.com/sanlng/item/afa31eed0a383e0e570f1d3e 在一般的应用中,特性(Attribute,以称为属性)好像被使用的不是很多. ...

  4. Performance Tuning guide 翻译 || Performance Tuning Guide 11G中新增特性

    CSDN 对格式支持比較弱.能够到http://user.qzone.qq.com/88285879/blog/1399382878 看一致的内容. Performance Tuning Guide  ...

  5. C#中的特性 (Attribute) 入门 (二)

    C#中的特性 (Attribute) 入门 (二) 接下来我们要自己定义我们自己的特性,通过我们自己定义的特性来描述我们的代码. 自定义特性 所有的自定义特性都应该继承或者间接的继承自Attribut ...

  6. C#中的特性 (Attribute) 入门 (一)

    C#中的特性 (Attribute) 入门 (一) 饮水思源 http://www.cnblogs.com/Wind-Eagle/archive/2008/12/10/1351746.html htt ...

  7. Lithium中关键特性更新

    Lithium中关键特性更新 1. Lithium特性更新概述 Lithium相对于Helium更新特性共27项,其中原有特性提升或增强13项,新增特性14项,如下表所示 特性类型 相对于Helium ...

  8. PHP中面向对象特性实现

    PHP近些年来成为全球最流行的网页编程语言,该语言以弱类型.易兼容.门槛低.开发快.功能强著称,且听别人这么说,我在有了c和c#基础后学习PHP过程中也并不是很顺利,该语言的一些特殊的语法规则又是让我 ...

  9. PHP中Trait特性

    Trait是自 PHP 5.4.0 起添加的一个新特性,是 PHP 多重继承的一种解决方案.例如,需要同时继承两个 Abstract Class, 这将会是件很麻烦的事情,Trait 就是为了解决这个 ...

随机推荐

  1. rc.local 开启自启动,检测是否成功

    rc.local /etc/init.d/nginx start 查看运行状态 systemctl status rc-local ● rc-local.service - /etc/rc.local ...

  2. 003 - 修改Pycharm的项目文件树样式

    相信习惯了Eclipse或者Windows的小伙伴对于Pycharm的目录树一定觉得特别别扭 因为它总是在文件前加一个三角形标注, 这样的标注在视觉上十分误导层级关系 修改的方式为   File -& ...

  3. 插入排序(InsertionSort)

    位置p上的元素存储于tmp(第一趟p通常取1),而(位置p之前)所有更大的元素都向右移动一个位置. 然后tmp被放在正确的位置上. 代码: public class InsertionSort { p ...

  4. bzoj4289

    最短路 很容易想到边和边之间连边,但是这样菊花图就完蛋了 我们想办法优化一下,能不能不要每条边都连. 考虑查分,把一个点的出边串起来,这样就行了,每条无向边拆成两条就能保证了 #include< ...

  5. Java创建对象解释

    创建对象包括两个步骤,首先为对象声明,然后为对象分配内存. (1)对象声明 格式:类名 对象名: 这里只是声明了对象,但该对象并不能够使用,原因为未分配内存空间. (2)为对象分配内存 格式:new ...

  6. URAL 1996 Cipher Message 3

    题目 神题. 记得当初DYF和HZA讲过一个FFT+KMP的题目,一直觉得很神,从来没去做. 没有真正理解FFT的卷积. 首先考虑暴力. 只考虑前7位 KMP 找出所有 B 串可以匹配 A 串的位置. ...

  7. 多叉树结构:JSON数据解析(一)

    多叉树结构:JSON数据解析(一) 最近做一个实时数据搜索引擎的项目中,在项目架构的偏顶层需要写一个JSON数据解析的模块,由于目前JSON解析没有现成统一开源框架可以利用,目前只是手工利用com.a ...

  8. Identity Server 4 原理和实战(完结)_----选看 OpenId Connect 简介

    Identity Procider:身份提供商

  9. MyEclipse控制台console自动跳动的解决方案

    有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行 按下面的设置,可以让它自动跳出来(或不跳出来): windows  ->   preferences   ...

  10. Linux locate 文件搜索

    在学习 兄弟连 linux教学视频 的时候,我将所学的 linux 命令记录在我的博客中,方便自己查阅. 文件处理命令:locate 基础的命令 命令名称:locate 命令的所在路径:/usr/bi ...