这是我在Delphi从入门到精通系列看到的一个例子,结果发现有很多地方不明白,麻烦各位先看看好吗?所有不明白的地方已经做了标记,虽然很多,知道看下去会比较烦,但是我身旁没有人可以问,只能在这里麻烦大家了······
unit Dates;interfacetype
TDate = class
private
fDate: TDateTime;
procedure SetDay(const Value: Integer);
procedure SetMonth(const Value: Integer);
procedure SetYear(const Value: Integer);
{下面三个函数不是已经定义了取得Day、Month、Year的值了吗?}
function GetDay: Integer;
function GetMonth: Integer;
function GetYear: Integer;
public
constructor Create; overload;
constructor Create (y, m, d: Integer); overload; //既然有了上面的Create,那这里是用来?
procedure SetValue (y, m, d: Integer); overload;
procedure SetValue (NewDate: TDateTime); overload;
procedure Assign(Source: TDate); function LeapYear: Boolean;
procedure Increase (NumberOfDays: Integer = 1);
procedure Decrease (NumberOfDays: Integer = 1);
function GetText: string;
{可是这里又定义了三个取得Day、Month、Year的值的属性(方法)??}
property Year: Integer read GetYear write SetYear;
property Month: Integer read GetMonth write SetMonth;
property Day: Integer read GetDay write SetDay;
end;implementationuses
SysUtils, DateUtils;procedure TDate.Assign (Source: TDate); //用Assign来为复制TDate内部的数据吗?如果没有这一步的话会??
begin
fDate := Source.fDate;
end;procedure TDate.SetValue (y, m, d: Integer);
begin
fDate := EncodeDate (y, m, d); //EncodeDate的作用是??
end;function TDate.LeapYear: Boolean;
begin
Result := IsInLeapYear(fDate);
end;procedure TDate.Increase (NumberOfDays: Integer = 1);
begin
fDate := fDate + NumberOfDays;
end;function TDate.GetText: string;
begin
GetText := DateToStr (fDate);
end;procedure TDate.Decrease (NumberOfDays: Integer = 1);
begin
fDate := fDate - NumberOfDays;
end;constructor TDate.Create (y, m, d: Integer);
begin
inherited Create; //继承了上面Public里面的Creat吗?
fDate := EncodeDate (y, m, d);
end;constructor TDate.Create;
begin
inherited Create;
fDate := Date;
end;procedure TDate.SetValue(NewDate: TDateTime);
begin
fDate := NewDate;
end;procedure TDate.SetDay(const Value: Integer);
begin
fDate := RecodeDay (fDate, Value); // RecodeDay这个函数在这里的作用是??
end;procedure TDate.SetMonth(const Value: Integer);
begin
fDate := RecodeMonth (fDate, Value);
end;procedure TDate.SetYear(const Value: Integer);
begin
fDate := RecodeYear (fDate, Value);
end;function TDate.GetDay: Integer;
begin
Result := DayOf (fDate); //DayOf 这个函数是??
end;function TDate.GetMonth: Integer;
begin
Result := MonthOf (fDate);
end;function TDate.GetYear: Integer;
begin
Result := YearOf (fDate);
end;end.
unit Dates;interfacetype
TDate = class
private
fDate: TDateTime;
procedure SetDay(const Value: Integer);
procedure SetMonth(const Value: Integer);
procedure SetYear(const Value: Integer);
{下面三个函数不是已经定义了取得Day、Month、Year的值了吗?}
function GetDay: Integer;
function GetMonth: Integer;
function GetYear: Integer;
public
constructor Create; overload;
constructor Create (y, m, d: Integer); overload; //既然有了上面的Create,那这里是用来?
procedure SetValue (y, m, d: Integer); overload;
procedure SetValue (NewDate: TDateTime); overload;
procedure Assign(Source: TDate); function LeapYear: Boolean;
procedure Increase (NumberOfDays: Integer = 1);
procedure Decrease (NumberOfDays: Integer = 1);
function GetText: string;
{可是这里又定义了三个取得Day、Month、Year的值的属性(方法)??}
property Year: Integer read GetYear write SetYear;
property Month: Integer read GetMonth write SetMonth;
property Day: Integer read GetDay write SetDay;
end;implementationuses
SysUtils, DateUtils;procedure TDate.Assign (Source: TDate); //用Assign来为复制TDate内部的数据吗?如果没有这一步的话会??
begin
fDate := Source.fDate;
end;procedure TDate.SetValue (y, m, d: Integer);
begin
fDate := EncodeDate (y, m, d); //EncodeDate的作用是??
end;function TDate.LeapYear: Boolean;
begin
Result := IsInLeapYear(fDate);
end;procedure TDate.Increase (NumberOfDays: Integer = 1);
begin
fDate := fDate + NumberOfDays;
end;function TDate.GetText: string;
begin
GetText := DateToStr (fDate);
end;procedure TDate.Decrease (NumberOfDays: Integer = 1);
begin
fDate := fDate - NumberOfDays;
end;constructor TDate.Create (y, m, d: Integer);
begin
inherited Create; //继承了上面Public里面的Creat吗?
fDate := EncodeDate (y, m, d);
end;constructor TDate.Create;
begin
inherited Create;
fDate := Date;
end;procedure TDate.SetValue(NewDate: TDateTime);
begin
fDate := NewDate;
end;procedure TDate.SetDay(const Value: Integer);
begin
fDate := RecodeDay (fDate, Value); // RecodeDay这个函数在这里的作用是??
end;procedure TDate.SetMonth(const Value: Integer);
begin
fDate := RecodeMonth (fDate, Value);
end;procedure TDate.SetYear(const Value: Integer);
begin
fDate := RecodeYear (fDate, Value);
end;function TDate.GetDay: Integer;
begin
Result := DayOf (fDate); //DayOf 这个函数是??
end;function TDate.GetMonth: Integer;
begin
Result := MonthOf (fDate);
end;function TDate.GetYear: Integer;
begin
Result := YearOf (fDate);
end;end.
9-10月,系统学习Pascal
11-1月,学习Opp Pascal 和Delphi组件的应用,开始尝试编一些小小的应用程序
寒假到2月份中旬,开发一个小型数据库。
不知道上面的计划是否科学,可是我已经完成了Pascal的学习,感觉还可以。可是下来的学习就让我有迷惑了。之前在学习图书馆借了一半介绍Delphi组件的,可是在看了一半后发觉。里面只是介绍怎么用组件,感觉是表面上的东西,然而里面的程序为什么那样写,各个代码又是什么意思,则很少提到,于是我又找来了从入门到精通来看,然而因为之前自己只学过C,没有面向对象语言的基础,所以感觉看那本书比较吃力,上面就是一个折腾我几天的一个程序,感觉入门到精通系列并不适合初学者,里面的实例太少了,我明白程序这种东西要是几天自己没有动手写代码的话,就会很生疏的,无奈坎图大师的这本书书可以用来练习的实例太少了。而且里面对Delphi组件的介绍只是稍微的提及而已。我怀疑,即使是我认真学完了那本书,缺少开发经验的我能否在2月份做一个数据库呢??
感觉现在好乱,Delphi的学习难度远超出我的意料,不知道下来该怎么办,是否还要按照原来的计划学习呢?迷惘中······
2、了解属性的构成:property 属性:类型 read 读方法 write 写方法;读、写方法是写在类里面的,property 只是对这些方法的引用。
3、Create可以是多态的,只要方法使用constructor关键字,不用用其它名称也行的。
4、熟悉Delphi的常用组件的用法。
5、熟悉常用函数的使用。
因为delphi的最大特点就是利用组件快速开发,上手很快.
然后再找本面像对像的书深入研究,再就是看delphi的源代码