程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 理解 Delphi 的類(十二) - 深入屬性

理解 Delphi 的類(十二) - 深入屬性

編輯:Delphi

關於屬性的話題還有很多, 譬如: 數組屬性、默認屬性、class 屬性等等.

  先總結一下前面提到過的屬性吧.TMyClass = class(TObject)
 private
  FName: string;
  procedure SetName(const Value: string);
 published
  property Name: string read FName write SetName;
 end;
1、屬性用 property 定義;

  2、read、write 兩個關鍵字至少要存在一個, 如果只有一個就成了只讀屬性或只寫屬性;

  3、屬性名後面也要指定類型(必須是內置類型或定義在前面的類型), 存取的類型必須要和它一致;

  4、屬性用到的字段與方法一定要聲明在屬性前面;

  5、如果屬性讀(read)的是方法, 那麼這個方法一定是個函數, 且返回值與屬性類型一致;

  如果屬性是非數組屬性, 該函數是無參數的, 譬如: function GetName: string;

  6、如果屬性寫(write)的是方法(一般也不會是字段), 那麼這個方法一定是個過程;

  如果屬性是非數組屬性, 該過程必須只有一個參數, 參數類型必須和屬性一致; 並且參數必須是傳值的;

  譬如: procedure SetName(s: string); 或者 procedure SetName(const s: string);

  7、屬性調用的方法不能是虛方法或動態方法; 不能是重載方法;

  8、如果屬性在 published 區, 那它調用的方法只能使用默認的 register 調用約定;

  9、屬性一般放在 published 區, 如果屬性不是公開的也就失去了屬性的意義;

  10、如果自定義的類不需要 RTTI 或許把屬性放到 public 區會更節省(個人認為);

  11、屬性讀寫的變量或方法一般放在 private 區, 如果都公開了就用不著屬性了;

  12、事件屬性讀寫的必須是方法, 不能是變量;

  13、屬性只是一個橋, 它沒有指針(它讀寫的變量和方法才有指針), 目的是方便存取並提出存取限制;

  14、還有 Delphi 的 IDE 為書寫屬性提供了非常方便的快捷鍵, 譬如:

  輸入: property Name: string; 然後執行 Ctrl+Shift+C ... 哇!

  ---屬性是個奇妙的創意, 讀寫屬性就像讀寫結構一樣方便; 但屬性的規矩好多啊, 但這還只是一般屬性的法則.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved