この発言は
#00855 佐々木@六角堂 さんのproperty の override
に対するコメントです
この発言に対し以下のコメントが寄せられています
#00860 佐々木@六角堂 さん RE:property の override は不可
こんにちは、佐々木@六角堂さん。
花井です。
佐々木@六角堂さんが示された例は、
> Inherited がプロパティにも使えるという例です。
です。
しかし、「プロパティの override の例」ではありません。
--
実証として、
> (* TEST PROGRAM *)
>
> var
> ADescendant: TDescendant990424;
の部分を
> var
> ADescendant: TAncestor990424;
と変更した後、実行してみてください。
例では、ADescendant 変数に TDescendant990424 型のインスタンスを
代入してから Text プロパティを設定しますが、この変更により
TAncestor990424.Text プロパティが直接呼ばれるようになってしまいます。
--
Delphi で override といえば、仮想メソッドか動的メソッドに対して付加
される指令であり、作用として、そのメソッドをクラスのどの世代から呼び
出しても 末裔世代の定義が真っ先に呼び出されるようになる、こうしたもの
を意味するのではないかと思います。
一方、プロパティはクラスと静的に結び付けられています。
クラスの各世代は、その世代のプロパティを直接呼び出してしまい、
子孫末裔のプロパティを呼んではくれません。
残念ながら、プロパティ自体は override と呼べるような仕組みを持っては
いません。
# 基底クラスが「プロパティのアクセス指定子で示されたメソッド」を
# うまく定義又は実装していれば、“実質的に override できるプロパティ”
# が実現できます。けれど、これはあくまでもメソッドのつくりに拠るもので、
# クラスとプロパティの関わりは相変わらず、「静的」です。
Original document by 花井 達 氏 ID:(ZXC11543)