比如说
先设计一个关于时间的类(Time类)。该类的成员如下:
代码:
//Time类的定义代码
class Time
{
//下面为私有成员
private int hour;
private int minute;
private int second;
private void SetTime(int h,int m, int s)
{
Hour = h;
Minute = m;
Second = s;
}
//下面为公有成员
//构造函数:无参数
public Time()
{
SetTime(0, 0, 0);
}
//构造函数:1个参数
public Time(int hourValue)
{
SetTime(hourValue, 0, 0);
}
//构造函数:3个参数
public Time(int hourValue,int minuteValue,int secondValue)
{
SetTime(hourValue, minuteValue, secondValue);
}
//属性:Hour
public int Hour
{
get { return hour; }
//如果value的值合法,就把value的值赋给hour,否则把0赋给hour
set { hour = ((value >= 0 && value < 24) ? value : 0); }
}
//属性:Minute
public int Minute
{
get { return minute; }
set { minute = ((value >= 0 && value < 60) ? value : 0); }
}
//属性:Second
public int Second
{
get { return second; }
set { second = ((value >= 0 && value < 60) ? value : 0); }
}
//函数:返回24小时制时间
public string ToString24()
{
string output = Hour + ":" + Minute + ":" + Second;
return output;
}
//函数:返回12小时制时间
public string ToString12()
{
int hourTemp = ((Hour == 12) || (Hour == 0))? 12 : (Hour % 12);
string AMPM = (Hour <12?"AM":"PM");
string output = hourTemp + ":" + Minute + ":" + Second + AMPM;
return output;
}
}
在上面的例子中,我们用属性实现对私有变量的访问,其好处如下:
1.可以对赋值进行合法性检查。
2.增强封装性,当数据的储存形式发生变化时,只需改动属性中的代码,其他代码不受影响。
主程序调用Time类,代码如下:
static void Main(string[] args)
{
Time time1 = new Time();
Console.WriteLine("time1:");
Console.WriteLine("24小时制时间:" + time1.ToString24()) ;
Console.WriteLine("12小时制时间:" + time1.ToString12()+"\n");
Time time2 = new Time(22);
Console.WriteLine("time2:");
Console.WriteLine("24小时制时间:" + time2.ToString24());
Console.WriteLine("12小时制时间:" + time2.ToString12() + "\n");
Time time3 = new Time(22,36,30);
Console.WriteLine("time2:");
Console.WriteLine("24小时制时间:" + time3.ToString24());
Console.WriteLine("12小时制时间:" + time3.ToString12() + "\n");
}
运行结果:
类的成员不光可以是int,double等基本类型的变量,也可以是其他类的对象。
我们在前面的那个例子的基础上继续追加,追加后完整的内容如下:
class Time
{
//下面为私有成员
private int hour;
private int minute;
private int second;
private void SetTime(int h, int m, int s)
{
Hour = h;
Minute = m;
Second = s;
}
//下面为公有成员
//构造函数:无参数
public Time()
{
SetTime(0, 0, 0);
}
//构造函数:1个参数
public Time(int hourValue)
{
SetTime(hourValue, 0, 0);
}
//构造函数:3个参数
public Time(int hourValue, int minuteValue, int secondValue)
{
SetTime(hourValue, minuteValue, secondValue);
}
//属性:Hour
public int Hour
{
get { return hour; }
//如果value的值合法,就把value的值赋给hour,否则把0赋给hour
set { hour = ((value >= 0 && value < 24) ? value : 0); }
}
//属性:Minute
public int Minute
{
get { return minute; }
set { minute = ((value >= 0 && value < 60) ? value : 0); }
}
//属性:Second
public int Second
{
get { return second; }
set { second = ((value >= 0 && value < 60) ? value : 0); }
}
//函数:返回24小时制时间
public string ToString24()
{
string output = Hour + ":" + Minute + ":" + Second;
return output;
}
//函数:返回12小时制时间
public string ToString12()
{
int hourTemp = ((Hour == 12) || (Hour == 0)) ? 12 : (Hour % 12);
string AMPM = (Hour < 12 ? "AM" : "PM");
string output = hourTemp + ":" + Minute + ":" + Second + AMPM;
return output;
}
}
//为了简介,我们把所有成员都定义为公有
class Date
{
public int year;
public int month;
public int day;
public Time clock;
//构造函数
public Date(int yearValue, int monthValue, int dayValue, Time timeValue)
{
year = yearValue;
month = monthValue;
day = dayValue;
clock = timeValue;
}
}
主程序修改为:
static void Main(string[] args)
{
//我出生了!
Date birthday = new Date(1981, 12, 2, new Time(16, 30, 0));
Console.Write("我出生于{0}年{1}月{2}日{3}。", birthday.year, birthday.month, birthday.day, birthday.clock.ToString24());
}
运行结果如下: