【C#】一个不错的VS编译器调试小技巧

       项目中遇到一个很有意思的情况,在一个类各个属性赋值的下一行代码处打断点,因为我想知道其各个属性是否初始化赋值成功。这里我们写一个demo来做演示,当然,精简了很多属性及继承结构和调用关系。

       新建一个控制台应用程序,有两个实体对象类,分别是Man和Student,其中Student继承于Man,所以在Student构造函数初始化中,也对其父类属性也进行了赋值。代码如下:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        private static Man xiaoming { get; set; }
        static void Main(string[] args)
        {
            xiaoming = new Student("xiaoming",12,178,3);
            Console.WriteLine(xiaoming.Name);
        }
    }

    class Man
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    class Student : Man
    {
        public int Hight { get; set; }
        public int Grade { get; set; }

        public Student(string name, int age, int hight, int grade)
        {
            this.Name = name;
            this.Age = age;
            this.Hight = hight;
            this.Grade = grade;
        }
    }
}

       可以看到,在Program类中定义的私有属性xiaoming,是Man类类型。但实质上,Main方法的第一行,就为xiaoming初始化成了子类型Student(子类本就属于父类所属类型,所以父类对象可以被赋值成子类对象),并为其各个属性赋值。然后在初始化的下一行代码处添加断点,按”F5“进入debug调试模式,查看xiaoming的各个属性。如下图:

 

【C#】一个不错的VS编译器调试小技巧_第1张图片

       可以看到,展开第一层“+”号,看到的只有Age和Name属性,也就是父类型Man的属性,实际上其Hight和Grade属性也是有值得,应该显示出来。想到vs编译环境下的监视窗口,也可以查看相关名称的值,于是如下操作:

【C#】一个不错的VS编译器调试小技巧_第2张图片

       可以看到上图中,还是看不到Hight的值,直接查找会报错,因为编译器认为xiaoming为Man类类型,并不包含Hight属性。

最终处理方式:在第一张截图中,再展开ConsoleApplication1.Student即可

【C#】一个不错的VS编译器调试小技巧_第3张图片

       也就是说,父类对象实际为具体子类对象时,要查看子对象的属性值,可以在调试状态下,展开第一行,当前子类那一行进行查看(这里是ConsoleApplication1.Student)。其实这里的demo很容易一个个找,然后找出来Hight的值在哪里可以查看。如果实体对象属性很多的话,有可能找半天找不到,通过监视窗口又无法查看。所以在第一行展开进行查看,而不要因为都是属性,直观性的理解都应该在同一级查看得到。毕竟这里最大不同,在于定义时是父类对象,实现时实际为子类对象。

 

你可能感兴趣的:(C#,VS编译器调试,小技巧,查看具体子类,属性)