This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
tutorial:class [2019/01/28 09:41] admin |
tutorial:class [2019/01/29 08:20] admin |
||
---|---|---|---|
Line 21: | Line 21: | ||
|ไม่ระบุ| หมายถึง public | | |ไม่ระบุ| หมายถึง public | | ||
+ | \\ | ||
+ | ---- | ||
+ | =====การสร้าง Class===== | ||
+ | การสร้าง Class อย่างง่าย มีรูปแบบดังนี้ | ||
+ | Type | ||
+ | TMyClass = class | ||
+ | {Field, Method, Property...} | ||
+ | end; | ||
+ | |||
+ | การสร้าง Class สืบทอดจาก Class อื่น มีรูปแบบดังนี้ () | ||
+ | |||
+ | Type | ||
+ | TMyClass = class(TObject) | ||
+ | {Field, Method, Property...} | ||
+ | end; | ||
+ | |||
+ | __**หมายเหตุ**__ - ในการสร้าง Class ทุกๆครั้งที่ไม่ได้ระบุว่าสืบทอดมาจาก Class ใด จะเป็นการสร้าง Class สืบทอดจาก TObject ซึ่งเป็น Class พื้นฐานของ FPC เสมอ \\ | ||
+ | |||
+ | ตัวอย่างการสร้าง Class แบบละเอียด | ||
+ | <sxh delphi;> | ||
+ | Type | ||
+ | TMyClass = class(TObject) | ||
+ | private | ||
+ | FName:string; | ||
+ | FValue:integer; | ||
+ | protected | ||
+ | function GetIsOK:boolean; | ||
+ | public | ||
+ | constructor create; | ||
+ | destructor destroy; override; | ||
+ | procedure DoSomeThing; | ||
+ | published | ||
+ | property Name:string read FName write FName; | ||
+ | property Value:integer read FValue write FValue default 0; | ||
+ | property IsOK:boolean read GetIsOK; | ||
+ | end; | ||
+ | </sxh> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ | ||
+ | ---- | ||
+ | =====Property===== | ||
+ | คือ คุณสมบัติของ Object ประกอบไปด้วย Getter (คำสั่งหลัง read) และ Setter (คำสั่งหลัง write)\\ \\ | ||
+ | เพื่อเป็นการอธิบายให้เห็นภาพ จะขอยกตัวอย่าง | ||
+ | |||
+ | property ValueX:integer read GetValueX write SetValueX; | ||
+ | |||
+ | จากตัวอย่างดังกล่าว Getter คือ GetValueX ส่วน Setter คือ SetValueX \\ | ||
+ | Getter จะถูกเรียกใช้งาน เมื่อมีการเรียกใช้ค่าของ Property ดังเช่น | ||
+ | |||
+ | writeln(ValueX); | ||
+ | | ||
+ | Setter จะถูกเรียกใช้งาน เมื่อมีการใส่ค่าให้ Property เช่น | ||
+ | |||
+ | ValueX:=12; | ||
+ | | ||
+ | ทำไมต้องมี Getter Setter ให้ยุ่งยาก แทนที่จะใช้ var หรือ Field อย่างเดียว? ประโยชน์ของการใช้งาน Property มีดังนี้ครับ | ||
+ | *ใช้คัดกรองตัวแปร บางครั้งเรารับค่าเพื่อการคำนวณในช่วง 0-100 เท่านั้น หากผู้ใช้ใส่ค่าเกินกว่าค่าดังกล่าวมา จะสามารถคัดกรองให้เป็นค่าที่อยู่ในช่วง 0-100 แทนได้ | ||
+ | *เพื่อให้ค่าของ Property ได้มีการ update ตลอดเวลา โดยเฉพาะหาก property ของเรา ขึ้นอยู่กับค่าอื่น เมื่อใดที่มีการเปลี่ยนค่า ก็จะมีการ update ค่า property เราด้วยเสมอ | ||
+ | |||
+ | |||
+ | รูปแบบการเขียน Property มีหลักๆดังนี้ | ||
+ | *Property ที่มี Getter, Setter เป็น Field | ||
+ | |||
+ | property Value:integer read FValue write FValue; | ||
+ | |||
+ | *property ที่มี Getter, Setter เป็น Procedure/Function ซึ่งโดยปกติ Getter จะเป็น Function ส่วน Setter จะเป็น Procedure | ||
+ | |||
+ | property ValueX:integer read GetValueX write SetValueX; | ||
+ | function GetValueX:integer; | ||
+ | procedure SetValueX(Value:integer); | ||
+ | |||
+ | *Property ที่แสดงค่าได้อย่างเดียว (ReadOnly) | ||
+ | |||
+ | property IsOK:boolean read GetIsOK; |