Jaskinie Podróże Nurki Grafika Mizar Teksty Kulinaria Lemkov Namiary Mapa RSS English
Spelunka Trybików Teksty Programowanie Dostęp do składowych chronionych YAC Software
  Wróć

Spis

Charsets

Wykresy

DBExpress

Delphi

HTML

Intraweb

MSTest

PHP

Programowanie

R

Rhino Mocks

Software

Testowanie

Testowanie UI

VB.NET

VCL

WPF

Dostęp do składowych chronionych
Załóżmy, że musimy odwołać się do chronionych właściwości (lub metod) instancji komponentu. Można oczywiście stworzyć nową klasę dziedziczącą po naszym komponencie, przenieść chronione składowe do sekcji publicznej, a następnie instancjonować tę nową klasę.

Jednak, w niektórych sytuacjach, może być to zbyt skomplikowane lub po prostu niemożliwe. Na przykład, gdy musimy odwołać się do chronionej składowej standardowego komponentu na jedną czy dwie operacje, tworzenie nowego komponentu, rejestrowanie go i zarządzanie nim może się okazać nieco zbyt kłopotliwe (jakoś zarządzanie komponentami w Delphi nigdy nie przypadło mi do gustu). A może klasa jest instancjonowana poza kodem, który kontrolujemy i nie mamy żadnych możliwości zmiany tego kodu?

Kod poniżej jest troszkę hakiem (lub raczej pójściem na skróty), ale w sytuacjach takich jak omówione powyżej działa całkiem zacnie. Rozważmy na ten przykład klasę TPanel i jej chronioną składową Canvas. Można to zrobić jak następuje:
  type
    TCanvasPanel = class(TPanel)
    public
      property Canvas;
    end;
  
  ...
    // Teraz powiedzmy, że Panel jest instancjonowany poza naszym kodem,
    // ale musimy mieć dostęp do jego chronionej składowej Canvas:
    TCanvasPanel(Panel).Canvas.Ellipse(10, 10, 50, 50);
  ...
    // Jednak poniższa instrukcja nie przejdzie -     // zostanie zgłoszony błąd wykonania (nieprawidłowe rzutowanie - EInvalidCast):     (Panel as TCanvasPanel).Canvas.Ellipse(10, 10, 50, 50);   ...
Tak to by było w Delphi, ale powinno dać się zrobić podobnie w tych językach, które pozwalają na rzutowanie typów bez zbyt restrykcyjnej kontroli typów.

Góra

Komentarze
Kurczę!
Na razie brak komentarzy...

Góra

Dodaj komentarz (pola z gwiazdką są obowiązkowe)
Imię / ksywa *
Mail (pozostanie ukryty) *
Twoja strona
Komentarz (bez tagów) *
Wpisz tekst wyświetlony poniżej *
 

Góra

Tagi

Programowanie

Delphi


Podobne strony

TFS - The underlying connection was closed: an unexpected error occurred on a receive.

WCF - The underlying connection was closed: an unexpected error occurred on a receive.

Interfejsy w Delphi... znowu

Zapisywanie / odtwarzanie lokalizacji okien w .NET

Weryfikacja "wiszących" procedur obsługi zdarzeń w formach Delphi

Znaczące identyfikatory

Publiczne pola a właściwości

Przeciąganie plików na okno aplikacji

Intraweb a MaxConnections

Argumenty za używaniem FreeAndNIL

Intraweb jako moduł DSO Apache'a

Intraweb a "Device not supported"

Zautomatyzowane testowanie GUI

Determinizm Random()

Zaokrąglanie i dokładność na FPU 8087

Intraweb a SessionTimeout

Używanie TChart w programach Intraweb

Unknown driver: MySQL

TIdMessage a CharSet

Gwarancje oprogramowania

Automatyczne testowanie formularzy okien

TChart - brakujące etykiety w osiach

Tracona pamięć i eksplozje połączeń w DBExpress

Kontrola dyrektyw kompilacji warunkowej oraz ustawień przełączników kompilacji

Wykrywanie traconej pamięci a DUnit

last_insert_id() a DBExpress

Rejestracja rozszerzeń

DBExpress a dostęp wielowątkowy

Formy jak ramki

Sprawdzanie błędnych odwołań a nowy menedżer pamięci

Obiekty, interfejsy i obsługa pamięci w Delphi - ki czort?