简单的this指针应用
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到底是什么意思
[解决办法]
不能省略this那个构造函数是因为你的参数名与字段名一致,
编译器无法区分
2.this代表传入的time类
比如time a = new time();
a.printMilitary这个方法内部操作的对象就是a
[解决办法]
为什么默认的构造函数this可以省略而构造函数不能
=========
因为你构造函数中的参数隐藏了同名的类字段
this.xxxx 表示引用类字段
ConvertToMilitary.printMilitary(this)中的this到底是什么意思
=======
当前的 Time 对象实例