zoukankan      html  css  js  c++  java
  • 关于FlagsAttribute

    最近在看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,然后跟进去就可以了。 

  • 相关阅读:
    运算符与优先级
    数据类型
    c++基础
    有关进制
    函数二——递归
    字符串与随机数
    C语言第一课
    Linux-Shell
    Linux入门
    文本处理三剑客命令初探
  • 原文地址:https://www.cnblogs.com/davytitan/p/5292857.html
Copyright © 2011-2022 走看看