2014-07-10 21 views
5

Jestem programistą Java i zawsze używam metod ustawiających getter. Jak mogę użyć tej koncepcji w Delphi?Jak automatycznie generować metody pobierające i ustawiające

  • zdefiniować zmienną lokalną //1
  • I utworzyć właściwość //2
  • pędzę CTRL + SHIFT + C i redaktor tworzy metody getter i setter //3

dla tego przykładu:

unit Unit1; 

type 
    ClassePippo=class 
    private 
    colorText:string; //1 
    function getColorText: String; //3 
    procedure setColorText(const Value: String); //3 
    public 
    property colore: String read getColorText write setColorText; //2 
    end; 

implementation 

{ ClassePippo } 

function ClassePippo.getColorText: String; //3 
begin 
    Result:=colorText; 
end; 

procedure ClassePippo.setColorText(const Value: String); //3 
begin 
    colorText:=Value; 
end; 

end. 

Czy istnieje funkcja automatycznego tworzenia metod pobierających i ustawiających?

Chcę tylko napisać colorText: string; //1 i wywołać skrót i chcę, aby IDE automatycznie tworzył //2 i //3.

(Kiedy rozwijać w Java przy użyciu Eclipse mogę automatycznego generowania metod getter i setter użyciu Source -> Generowanie getter i setter ...)

+0

Przenieś karetkę do sekcji, w której należy zdefiniować swoją właściwość, naciśnij "CTRL + J", wybierz "propgs" i wpisz nazwę i typ właściwości (użyj 'TAB' i' SHIFT + TAB', aby przechodzić między tymi polami) . – TLama

+4

Jeśli chcesz ułatwić sobie życie, powinieneś zacząć stosować się do standardowych wytycznych nazewnictwa: właściwość nazywa się "ColorText", a pole nosi nazwę "FColorText". –

+0

@TLama z Delphi 2009 propgs nie pojawia się na liście szablonów - myślę, że jest dostępna tylko z XE i nowszymi? – mjn

Odpowiedz

11

Wpisz się właściwość chcesz najpierw zamiast wewnętrznego zmienna. Wystarczy utworzyć rodzaj następujące w klasie Więc

Property Colore : String Read GetColorText Write SetColorText;

następnie naciśnij CtrlShift,C

IDE będzie następnie utworzyć getter, setter i zmienną wewnętrzną prywatnego.

Należy pamiętać, że funkcje ustawiania i pobierania właściwości są opcjonalne w Object Pascal. Można równie dobrze napisać

Property Colore : String Read FColorText Write FColorText;

lub mają tylko setter czy getter

Property Colore : String Read FColorText Write SetColorText;

W tym przypadku IDE będzie generować metodę prywatną FColorText zmienny i setter SetColorText

+0

OK, ale na przykład funkcja 'GetColorText' jest pusta: IDE nie wstawia automatycznie ' Wynik: = colorText; ' – padibro

+0

@bradipo, nie może tam niczego wstawić, ponieważ IDE nie ma pojęcia, że ​​twoje pole' colorText' odnosi się do Własność 'Colore'. – TLama

+0

@TLama To prawda, pracuję z Delphi na codziennych zasadach, ale wciąż mnie to zaskakuje. Z łatwością mógł wypełnić setera. Getter ma jednak sens. Wciąż jestem pewien, że Embarcadero mógł wykonać tę pracę tak, jak Bradipo zapytał, czy też tego chcą. –

2

Nie ma żadnej funkcji w IDE, która zrobi to, co chcesz.

Można użyć Ctrl + Shift, + C do generowania pobierające i ustawiające z deklaracją property. Ale ci pobierający i ustawiający są pustymi skrótami.

Szczerze mówiąc to całkiem rozsądne zachowanie w mojej opinii. W jaki sposób można oczekiwać, że IDE będzie wiedział, w jaki sposób chcesz wprowadzić swojego zdobywcę i setera. Nie można się spodziewać, aby wiedzieć, które pole zamierzasz użyć. Twój kod jest dobrą demonstracją tego, dlaczego tak jest. Nie ma oczywistej zależności algorytmicznej między nazwą właściwości a nazwą pola.

Inną kwestią, którą należy zrobić, jest to, że jeśli chcesz, aby IDE automatycznie wygenerowało kod dla gettera i settera, dlaczego w ogóle masz kłopoty z programem pobierającym i ustawiającym? Można doskonale napisać:

property colore: string read ColorText write ColorText; 

Jeśli chcesz, aby móc używać tej funkcji, jak opisać trzeba będzie znaleźć rozszerzenie do Delphi, który implementuje funkcję. Oczywistymi kandydatami są CnPack i GExperts. Lub jeśli nie możesz znaleźć takiego rozszerzenia, napisz je sam.

+1

Co sugerujesz rozszerzenia? Poza tym wszystko, co jest w twoim poście, zostało już powiedziane ... – TLama

+0

@TLama Proponuję rozszerzenia, ponieważ IDE nie robi tego, co chce pytający. Szczerze mówiąc nie widzę, że moja odpowiedź powiela inną odpowiedź. Twierdzę, że to, czego żąda pytający, nie jest możliwe w IDE Delphi. Nie ma funkcji, które robią to, co chce. Druga odpowiedź, w chwili pisania tego, wcale tego nie mówi. Czy możesz wskazać, gdzie zostały napisane punkty, które piszę w mojej odpowiedzi? –

+0

Błagam o wybaczenie. Źle zrozumiałem pytanie. OP chce wygenerować właściwość z pobierającym i ustawiającym z pola, które nie jest obsługiwane (nawet przez CnPack). – TLama

1

Możesz to zrobić w trzech krokach.

Definiowanie właściwości z getter i zmiennej do przechowywania wartości:

property OnOff: Boolean Read GetOnOff Write fOnOff; 

Naciśnij klawisze Control + Shift + C, aby wygenerować zmienną i getter sub:

private 
fOnOff: Boolean; 
function GetOnOff: Boolean; 

...

I

function TMyClass.GetOnOff: Boolean; 
begin 
    Result := fOnOff; 
end; 

teraz zmienić właściwość do odczytu zmiennej i pisać setter:

property OnOff: Boolean Read fOnOff Write SetOnOff; 

Naciśnij klawisze Control + Shift + C ponownie wygenerować sub seter:

procedure TMyClass.SetOnOff(const Value: Boolean); 
begin 
    fOnOff := Value; 
end; 

Teraz zmień właściwość używać getter i setter:

property OnOff: Boolean Read GetOnOff Write SetOnOff; 

Tak, to trochę skomplikowane, ale jeśli masz dużo do określania właściwości naraz może pomóc.