• 关于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#基础笔记(第十九天)
    C#基础笔记(第十八天)
    C#基础笔记(第十七天)
    C#基础笔记(第十六天)
    C#基础笔记(第十五天)
    [PyTorch 学习笔记] 6.1 weight decay 和 dropout
    PyTorch ResNet 使用与源码解析
    [PyTorch 学习笔记] 5.2 Hook 函数与 CAM 算法
    [PyTorch 学习笔记] 5.1 TensorBoard 介绍
  • 原文地址:https://www.cnblogs.com/davytitan/p/5292857.html
Copyright © 2020-2023  润新知