首页 > 其他 > 详细

关于FlagsAttribute

时间:2016-03-18 17:44:21      阅读:215      评论:0      收藏:0      [点我收藏+]

最近在看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

原文:http://www.cnblogs.com/davytitan/p/5292857.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!