最近在看C#本质论,有介绍FlagsAttribute的特性,看了下源码,发现只是一个简单的特性class和一个构造函数。

调试了一下.NET的源码,发现在console.writeline(***); ***是带有flags特性的Enum, 实际上,这个时候, 调用的是writeline(Object value)这个函数,

然后在函数中,有调用 f.tostring()

public virtual void WriteLine(Object value) {
            if (value==null) {
                WriteLine();
            }
            else {
                // Call WriteLine(value.ToString), not Write(Object), WriteLine().
                // This makes calls to WriteLine(Object) atomic.
                IFormattable f = value as IFormattable;
                if (f != null)
                    WriteLine(f.ToString(null, FormatProvider));
                else
                    WriteLine(value.ToString());
            }
        }

继续跟踪,是调用那个了Enum.tostring() 重写的方法,在这里,判断了如果有flags特性的话,会反射***,获取字段名,然后输入,而不是直接输出 int了。

http://referencesource.microsoft.com/  上有如何调试.NET源码,比较方便,不用先下载源码,设置好 调试--符号位置,然后可以先下载调试符号,然后慢慢下载源码跟踪就可以了。

之前也下载了 .net4.6的源码,但是编译有问题,如果用这种方式调试的话,实际上就跟普通的项目一样了,引用dll,然后跟进去就可以了。

关于FlagsAttribute的更多相关文章

  1. C# Enum 简易权限设计 使用FlagsAttribute属性

    基本權限設計: /// <summary> /// 權限列舉 /// </summary> [FlagsAttribute] public enum Permissions { ...

  2. (转载)C# 枚举 FlagsAttribute用法

    这是读过几篇文章后发现整理的最完整的一篇文章 转载地址:枚举特性FlagsAttribute的用法 先看官方的解释:指示可以将枚举作为位域(即一组标志)处理. 看起来并不好理解,到底什么是作为位域处理 ...

  3. 正确使用Enum的FlagsAttribute

    正确使用Enum的FlagsAttribute FlagsAttribute 标志枚举对象的值可以包括多个枚举成员,每个成员代表枚举值中的一个位域 使用步骤 添加标记[Flags] 用 2 的幂(即 ...

  4. 枚举特性FlagsAttribute的用法

    先看官方的解释:指示可以将枚举作为位域(即一组标志)处理. 看起来并不好理解,到底什么是作为位域处理? 其实说的通俗点就是用二进制的表示方式来处理数学集合概念中关于集合的或与非等运算方法. 有什么用 ...

  5. C#知识点记录

    用于记录C#知识要点. 参考:CLR via C#.C#并发编程.MSDN.百度 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Ru ...

  6. 性能优化方法(Z)

    关于C#程序优化的五十种方法 作者: 字体:[增加 减小] 类型:转载 时间:2013-09-12我要评论 这篇文章主要介绍了C#程序优化的五十个需要注意的地方,使用c#开发的朋友可以看下 一.用属性 ...

  7. ConcurrentAsyncQueue 2014-09-07

    #define NET45 namespace Test { using System; using System.Threading; using System.Threading.Tasks; u ...

  8. JsonHelper developed by using Newtonsoft.Json.NET, Deserialize to <T> object , XmlToJson/JsonToXml, QuoteName by using JToken Path.

    namespace TestConsoleApplication { using System; using System.Diagnostics; using System.Threading; u ...

  9. C#改善程序的50种方法

    作者: suyan010203  来源: 博客园  发布时间: 2011-07-09 14:47  阅读: 11976 次  推荐: 8   原文链接   [收藏] 从去年找工作以来,都没什么时间写博 ...

随机推荐

  1. python 获取当前时间

    我有的时候写程序要用到当前时间,我就想用python去取当前的时间,虽然不是很难,但是老是忘记,用一次丢一次,为了能够更好的记住,我今天特意写下python 当前时间这篇文章,如果你觉的对你有用的话, ...

  2. WebForm页面生命周期WEBFORM_ASPNET控件树的生成和作用

    WebForm页面生命周期WEBFORM_ASPNET控件树的生成和作用 摘要 页面类是如何结合后台文件类生成整个页面的HTML的代码和后台输出的代码输出到浏览器中呢?这就牵扯到Asp.net页面生命 ...

  3. ios学习笔记之UIControl解读

    UIControl,相信大家对其并不陌生吧,比如平常最常用的UIButton就是继承自UIControl的.按照惯例,还是先来看看为什么有UIControl这个类?什么时候用到它? 查下文档就可以看到 ...

  4. thrift之默认传输类TTransportDefaults和虚拟传输类TVirtualTransport

    默认传输类TTransportDefaults提供了抽象类TTransport的默认实现,实现了非虚拟的方法(*_virt) read(), readAll(), write(),borrow() a ...

  5. 用maven来创建web工程

    大约已经一个月没有写博客了,一个是最近太忙,另外啊还是人慢慢的变懒,最近在拆pool,用到了maven,因此呢把自己的一些心得记下来了,供大家参考,欢迎指正. 1.配置maven环境: 首先下载mav ...

  6. javascript数组、对象和Null的typeof同为object,区分解决办法

    在JS里typeof 大家用的很多,可以使对于数组.对象和Null无法区分的问题,看了看犀牛书还是有解决办法的. document.writeln(typeof "abc"); / ...

  7. [置顶] 让我爱恨的ThinkPHP Relation

    还记得第一次用ThinkPHP的relation,做了一个关联查询,觉得特别好用.有那么一天尝试着用关联插入,怎么插,都插不进,我插,我擦! 后来在龙哥的指点下算是成功的实践了一次,后来怎么用都不顺, ...

  8. SharePoint Solutions Deployment-PowerShell

    之前群里有人问到了这个,项目一期开发结束后正好整理了一下,发上来分享一下,也是从谷歌搜索里面学来的,大家要用好搜索哈 $ver = $host | select version if ($ver.Ve ...

  9. struts升级到最高版本后遇到的问题。关于actionmessage传递问题。

    Struts2升级到最新版本遇到的一些问题 首先是更换对应的jar,如asm.common.ongl.struts等等.更换后发现系统启动不了,按照网上的介绍,先后又更新了slf4j-log4j12- ...

  10. Android之WebView网页滚动截图

    WebView 网页滚动截屏,可对整个网页进行截屏而不是仅当前屏幕哦! 注意若Web页面存在position:fixed; 的话得在调用前设置为 position:absolute; 哦,否则会出现很 ...