class Program
    {
        public class Time
        {
            private int hour;
            private int minute;
            private int second;
            public Time()
            {
                //以下3个this指针可以省略
                this.hour = 0;
                this.minute = 0;
                this.second = 0;
            }
            public Time(int hour, int minute, int second)
            {
                //以下3个this指针不能省略
                this.hour = hour;
                this.minute = minute;
                this.second = second;
            }
            public int Hour
            {
                get
                {
                    return this.hour;
                }
                set
                {
                    this.hour = value;
                }
            }
            public int Minute
            {
                get
                {
                    return this.minute;
                }
                set
                {
                    this.minute = value;
                }
            }
            public int Second 
            {
                get
                {
                    return this.second;
                }
                set
                {
                    this.second = value;
                }
            }
            public void printStandard()
            {
                Console.WriteLine("Standard print:");
                Console.WriteLine("{0}:",(hour==0||hour==12)?hour:hour%12);
                Console.WriteLine("{0}{1}:",minute<0?"0":"",minute);
                Console.WriteLine("{0}{1}:",second<10?"0":"",second);
                Console.WriteLine("{0}",hour<12?"AM":"PM");
            }
            public void printMilitary()
            {
                //本方法只能使用this指针
                ConvertToMilitary.printMilitary(this);
            }
        }
        public class ConvertToMilitary
        {
            public static void printMilitary(Time time)
            {
                Console.WriteLine("Military print:");
                Console.WriteLine("{0}{1}:", time.Hour < 10 ? "0" : "", time.Hour);
                Console.WriteLine("{0}{1}:", time.Minute < 0 ? "0" : "", time.Minute);
                Console.WriteLine("{0}{1}:", time.Second < 10 ? "0" : "", time.Second);
            }
        }
                
        static void Main(string[] args)
        {
            Time t1 = new Time(13, 23, 45);
            Console.WriteLine("t1:");
            t1.printStandard();
            t1.printMilitary();
        
        }请问哪位高手教教我为什么默认的构造函数this可以省略而构造函数不能,还有ConvertToMilitary.printMilitary(this)中的this到底是什么意思

解决方案 »

  1.   

    int hour, int minute, int second你把这三个参数名改成
    int hour1, int minute1, int second1
    那么也可以省略this
      

  2.   

    不能省略this那个构造函数是因为你的参数名与字段名一致,
    编译器无法区分2.this代表传入的time类
    比如time a = new time();
    a.printMilitary这个方法内部操作的对象就是a
      

  3.   

    为什么默认的构造函数this可以省略而构造函数不能=========因为你构造函数中的参数隐藏了同名的类字段this.xxxx 表示引用类字段
    ConvertToMilitary.printMilitary(this)中的this到底是什么意思
    =======
    当前的 Time 对象实例