Virtual

Mikä on avainsanan virtual merkitys?
4425
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

senkun lisäät vaikkapa formin määrittelyyn:

procedure test2; virtual;

laitat kohdistimen -> virtual;

ja painat Ctrl-F1.

Miksiköhän Delphin sisäisen ohjeen käyttö on noin vaikeaa ?

The Virtual directive allows a method in a class to be overriden (replaced) by a same named method in a derived class.

You would mark a function or procedure as Virtual when you happily allow a programmer who creates a class based on your class to replace its functionality.

For example, you might allow a base class to paint a canvas in white, but allow a derived class to paint a picture on the canvas instead. Here, the virtual directive is allowing the code to be extended, to be enriched.

Virtual may be followed by the Abstract directive. This modifies the effect of the virtual directive. It means that the current class must not code the method - it is there only as a placeholder to remind and ensure that derived classes implement it.

Notes
Virtual is semantically equivalent to Dynamic. The former is optimised for speed, the latter for memory.

Äänestä
  • En osaa englantia, voitko sanoa saman suomeksi?

    Äänestä

  • kiitos vastauksesta kirjoitti:

    En osaa englantia, voitko sanoa saman suomeksi?

    Tuosta saa sen käsityksen että kun käyttää luokan metodin esittelyssä dynamic (kääntäjän ohjeen/) avainsanan tilalla virtual niin kyseinen luokan metodi
    toimii nopeammin. Jos taas käyttää dynamic avainsanaa niin se vie vähemmän muistia.

    Eli kääntäjä voi rakentaa olioiden metodien kutsun kahdella eri tavalla.

    Äänestä

Virtuaalimetodia voit testata myös tämän esimerkin avulla
Aluksi luot lomakkeelle napin ja memon sekä napille painamistapahtuman.
Sen jälkeen lisäät puuttuvan koodin

...
type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

TKantaLuokka = class
public
function EiVirtuaaliMetodi: string;
function VirtuaaliMetodi: string; virtual;
end;

TLapsiLuokka = class(TKantaLuokka)
public
function EiVirtuaaliMetodi: string;
function VirtuaaliMetodi: string; override;
end;

var
Form1: TForm1;

implementation

{ TForm1 }

function TKantaLuokka.EiVirtuaaliMetodi: string;
begin
Result := 'TKantaLuokka.EiVirtuaaliMetodi';
end;

function TKantaLuokka.VirtuaaliMetodi: string;
begin
Result := 'TKantaLuokka.VirtuaaliMetodi';
end;

function TLapsiLuokka.EiVirtuaaliMetodi: string;
begin
Result := 'TLapsiLuokka.EiVirtuaaliMetodi';
end;

function TLapsiLuokka.VirtuaaliMetodi: string;
begin
Result := 'TLapsiLuokka.VirtuaaliMetodi';
end;

procedure TForm1.Button1Click(Sender: TObject);
var k: TKantaLuokka;
l: TKantaLuokka;
// määritellään lapsiluokalle
//myös kantaluokka tyyppinen osoitin

begin
k := TKantaLuokka.Create;
l := TLapsiLuokka.Create;
try
Memo1.Lines.Add(k.EiVirtuaaliMetodi);
Memo1.Lines.Add(k.VirtuaaliMetodi);
Memo1.Lines.Add(l.EiVirtuaaliMetodi);
Memo1.Lines.Add(l.VirtuaaliMetodi);
finally
l.Free;
k.Free;
end; // try finally
end;

...

Äänestä

Kommentoi aloitusta


virtuaali kirjoitti:

Mikä on avainsanan virtual merkitys?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu