- 16.05.2016
- 3 minute de citit
In acest articol
Mostenirea este utilizata pentru a modela relatia „sau-o” sau subtiparea, in programarea orientata pe obiecte.
Specificarea relatiilor de mostenire
Specificati relatii de mostenire utilizand cuvantul cheie mostenire intr-o declaratie de clasa. Forma sintactica de baza este prezentata in exemplul urmator.
tastati MyDerived (…) = mosteni MyBase (…)
O clasa poate avea cel mult o clasa de baza directa. Daca nu specificati o clasa de baza utilizand cuvantul cheie inherit, clasa mosteneste implicit de la System.Object.
Membri mosteniti
Daca o clasa mosteneste de la o alta clasa, metodele si membrii clasei de baza sunt disponibile utilizatorilor clasei derivate ca si cum ar fi membri directi ai clasei derivate.
Orice legare let si parametrii constructorului sunt private pentru o clasa si, prin urmare, nu pot fi accesate din clase derivate.
Cuvantul cheie baza este disponibil in clase derivate si se refera la instanta clasei de baza. Este folosit ca autoidentificator.
Metode si suprascrieri virtuale
Metodele virtuale (si proprietatile) functioneaza oarecum diferit in F # in comparatie cu alte limbaje .NET. Pentru a declara un nou membru virtual, utilizati cuvantul cheie abstract. Faceti acest lucru indiferent daca furnizati o implementare implicita pentru acea metoda. Astfel, o definitie completa a unei metode virtuale intr-o clasa de baza urmeaza acest model:
membru abstract [nume-metoda]: [tip] implicit [auto-identificator]. [nume-metoda] [lista-argument] = [corp-metoda]
Si intr-o clasa derivata, o suprascriere a acestei metode virtuale urmeaza acest model:
suprascrie [auto-identificator]. [nume-metoda] [lista-argument] = [corp-metoda]
Daca omiteti implementarea implicita in clasa de baza, clasa de baza devine o clasa abstracta.
Urmatorul exemplu de cod ilustreaza declaratia unei noi metode virtuale function1 intr-o clasa de baza si cum sa o suprascrieti intr-o clasa derivata.
tip MyClassBase1 () = let mutable z = 0 abstract member function1: int -> int implicit u.function1 (a: int) = z <- z + a; z tip MyClassDerived1 () = mostenesc MyClassBase1 () override u.function1 (a: int) = a + 1
Constructori si mostenire
Constructorul pentru clasa de baza trebuie apelat in clasa derivata. Argumentele pentru constructorul clasei de baza apar in lista argumentelor din clauza ereditara. Valorile utilizate trebuie determinate din argumentele furnizate constructorului de clase derivat.
Urmatorul cod arata o clasa de baza si o clasa derivata, unde clasa derivata apeleaza constructorul clasei de baza in clauza ereditara:
tastati MyClassBase2 (x: int) = permiteti modificarea z = x * x faceti pentru i in 1..z faceti printf “% d” i tastati MyClassDerived2 (y: int) = mosteniti MyClassBase2 (y * 2) faceti pentru i in 1 ..d printf “% d” i
In cazul mai multor constructori, se poate utiliza urmatorul cod. Prima linie a constructorilor de clase derivate este clauza inherit, iar campurile apar ca campuri explicite care sunt declarate cu cuvantul cheie val. Pentru mai multe informatii, consultati Campuri explicite: Cuvantul cheie val.
tastati BaseClass = val string1: string new (str) = {string1 = str} new () = {string1 = “”} tip DerivedClass = mosteniti BaseClass val string2: sir nou (str1, str2) = {eredita BaseClass (str1); sir2 = str2} nou (str2) = {mosteneste BaseClass (); sir2 = str2} let obj1 = DerivedClass (“A”, “B”) let obj2 = DerivedClass (“A”)
Alternative la mostenire
In cazurile in care este necesara o modificare minora a unui tip, luati in considerare utilizarea unei expresii obiect ca alternativa la mostenire. Urmatorul exemplu ilustreaza utilizarea unei expresii obiect ca alternativa la crearea unui nou tip derivat:
open System let object1 = {new Object () with override this.ToString () = “Aceasta suprascrie obiectul.ToString ()”} printfn “% s” (object1.ToString ())
Pentru mai multe informatii despre expresiile obiectelor, consultati Expresiile obiectelor.
Cand creati ierarhii de obiecte, luati in considerare utilizarea unei uniuni discriminate in loc de mostenire. Uniunile discriminate pot modela, de asemenea, comportamentul variat al diferitelor obiecte care impartasesc un tip general comun. O singura uniune discriminata poate elimina adesea necesitatea unui numar de clase derivate care sunt variatii minore unele de altele. Pentru informatii despre sindicatele discriminate, consultati Sindicatele discriminate.
Vezi si
- Expresii de obiecte
- F # Referinta de limba
centoxcento valentina mila porn
film in streaming xxx mila porno
valentina nappi scene milamilan
italy porn film milan porn
rocco siffredi pornstar milena la pugliese porn
cento x cento movies milena la pugliese porno
film cento per cento streaming milena mastromarino anal
porno assatanate milena mastromarino porn
nel culo moglie milena mastromarino porno
patrizia cavalli porno milena mastromarino rocco siffredi
italian streaming porn milena mastromarino video xxx
roberta gemma threesome milena mastromarino xxx
manya centoxcento milf figona
mario salieri works milf morena
valentina nappi behind the scenes milf mouth
mario salieri porno milf pomezia
porno culo nero milf pussy hairy
italy porno tube milf roberta
pool orgy milf sfondata
valentina nappi backstage milf troiona








