Od pre­pro­stih vprašanj o pred­no­stih jezika C# do razlage različnih elementov pro­gram­ske­ga jezika in njihove uporabe smo sestavili seznam 10 naj­po­memb­nej­ših vprašanj za razgovor za delo v jeziku C#.

Ta članek iz­po­sta­vlja deset naj­po­go­stej­ših vprašanj na razgovoru za delovno mesto raz­vi­jal­ca. Priložili smo tudi odgovore na vsako od teh vprašanj. Čeprav ta vprašanja pokrivajo različne teme, od pre­pro­stih do podrobnih, obstaja še veliko drugih možnih vprašanj o C# in njegovih posebnih la­stno­stih.

Ta članek ponuja začetni pregled različnih vprašanj, ki se lahko zastavijo, od pre­pro­stih do bolj spe­ci­fič­nih, ki zahtevajo določene po­drob­no­sti. Ta članek vam lahko pomaga tudi razumeti, kako se pri­pra­vi­ti na razgovor, katerega cilj je preveriti vaše znanje do­lo­če­ne­ga pro­gram­ske­ga jezika.

Vprašanje 1: Katere so po­seb­no­sti jezika C# in katere prednosti ponuja ta pro­gram­ski jezik?

S svojim posebnim razvojnim okoljem Visual Studio je C# v osnovi zasnovan za hitrost. Kot objektno usmerjen pro­gram­ski jezik C# prepriča tudi s pre­pro­stim in sodobnim razvojem aplikacij, ki je vse­stran­ski in zmogljiv. Zato se mnogi raz­vi­jal­ci odločijo za C#, ko se odločajo, kateri pro­gram­ski jezik se bodo naučili.

C# je v osnovi struk­tu­ri­ran okoli razredov in objektov, pri čemer se strogo drži načel ti­pi­zi­ra­nja. Omogoča funk­ci­o­nal­no­sti, kot so ab­strak­ci­ja, en­kap­su­la­ci­ja in dedovanje. Pro­gram­ski jezik je namenjen predvsem razvoju znotraj eko­si­s­te­ma Microsoft .NET.

Zaradi uskla­je­no­sti z ogrodjem .NET ima C# svojo lastno strukturo, v kateri številni tipi znotraj struktur .NET dedujejo iz razreda objektov. Po­sle­dič­no ti razredi dedujejo metode, lastnosti, polja in dogodke. Ta hi­e­rar­hič­na struktura omogoča do­sle­dnost in med­se­boj­no delovanje znotraj eko­si­s­te­ma .NET.

Vprašanje 2: Kaj pomeni kla­si­fi­ka­ci­ja »objekt« v C#?

Ra­zu­me­va­nje objektov v C# temelji na po­zna­va­nju osnovnih načel jezika. V osnovi je C# objektno usmerjen pro­gram­ski jezik, v katerem razredi pred­sta­vlja­jo temelj. Razred opre­de­lju­je strukturo podatkov in določa, kako se ti shra­nju­je­jo, upra­vlja­jo in prenašajo v C#. V bistvu služi kot osnova za vse druge po­dat­kov­ne strukture.

Objekti so realni elementi v jeziku C#, ki zavzemajo tudi realne vrednosti v raz­po­lo­žlji­vem po­mnil­ni­ku. Vse entitete, ki imajo zelo spe­ci­fič­ne lastnosti ali opra­vlja­jo določeno nalogo v pro­gram­ski opremi, se lahko štejejo za objekte. Tip objekta je definiran s pomočjo razreda, in­stan­ci­ra­nje razredov pa tvori okvir za njihovo nadaljnjo strukturo.

Recimo, da obli­ku­je­mo program, ki se osre­do­to­ča na televizor. Najprej moramo kot izhodišče opre­de­li­ti entiteto. V tem primeru lahko ustvarimo razred »Televizor«. V tem razredu želimo opre­de­li­ti pet lastnosti: pro­i­zva­ja­lec, model, barva, velikost in cena. Te lastnosti so člani razreda. Drugi člani razreda so lahko dogodki, metode ali polja, ki skupaj tvorijo objekt.

Da bi pro­gra­mi­ra­li Sony Bravia kot primer te­le­vi­zor­ja, lahko pri ustvar­ja­nju tega objekta kot lastnosti določimo Sony, Bravia, Black, 50 in 500. S tem opre­de­li­mo in­for­ma­ci­je o pro­i­zva­jal­cu, modelu, barvi, velikosti in ceni. Televizor Sony je torej primer razreda Te­le­vi­si­on. Da bi ta razred postal dostopen, je pomembno, da ga opre­de­li­mo kot javnega in ne kot zasebnega ali za­šči­te­ne­ga.

Vprašanje 3: Kakšna je razlika med upra­vlja­nim in ne­u­pra­vlja­nim kodom v C#?

Upra­vlja­ni kod

Upra­vlja­ni koda v C# je vsa koda, ustvar­je­na z uporabo .NET Framework. Ta vrsta kode se izvaja ne­po­sre­dno s pomočjo Common Language Runtime (CLR). CLR upravlja ži­vljenj­ski cikel kode, vključno z ustvar­ja­njem objektov, do­de­lje­va­njem po­mnil­ni­ka in od­stra­nje­va­njem objektov.

Ne­u­pra­vlja­ni kod

Koda, razvita zunaj okvira .NET Framework, se imenuje ne­u­pra­vlja­na koda. Ta ka­te­go­ri­ja zajema vse apli­ka­ci­je, ki se ne izvajajo pod nadzorom CLR.

.NET Framework ponuja funkcijo, ki lahko pretvori ne­u­pra­vlja­no kodo v upra­vlja­no kodo in obratno. Ta funkcija je še posebej uporabna, saj omogoča nemoteno in­te­gra­ci­jo ustvar­ja­nja in izvajanja objektov ter od­stra­nje­va­nja kode znotraj okvira.

Vprašanje 4: Kakšna je razlika med strukturo in razredom?

V jeziku C# izraza razred (class) in struktura (struct) ozna­ču­je­ta upo­rab­ni­ško de­fi­ni­ra­ne po­dat­kov­ne tipe. Ti po­dat­kov­ni tipi imajo nekaj temeljnih razlik.

Struktura

  • Kot tip vrednosti v C# strukture vedno im­pli­ci­tno dedujejo iz System.ValueType.
  • Strukture ne morejo izhajati iz drugih tipov.
  • Praviloma se struktura uporablja za manjše količine podatkov.
  • Strukture ne morejo biti ab­strak­tne in zato zahtevajo ne­po­sre­dno im­ple­men­ta­ci­jo.
  • Strukturi ni mogoče dodeliti stan­dar­dne­ga kon­struk­tor­ja.
  • Ustvar­ja­nje objekta z uporabo ključne besede new ni obvezno.

Razred

  • Kot re­fe­renč­ni tip v C# razredi vedno im­pli­ci­tno dedujejo iz System.Object.
  • Razredi se lahko izpeljejo iz drugih razredov, kar omogoča dedovanje.
  • Praviloma se razred uporablja za večje količine podatkov ali bolj zapletene strukture.
  • Razredi so lahko ab­strak­tni, kar pomeni, da ne omogočajo ne­po­sre­dne in­stan­ca­ci­je.
  • V nasprotju s struk­tu­ra­mi lahko razredi imajo stan­dar­dni kon­struk­tor, če ga po­tre­bu­je­jo.

Vprašanje 5: Kakšna je razlika med vmesnikom in ab­strak­tno razredom v C#?

Vmesniki (in­ter­fa­ces) in ab­strak­tne razrede (abstract classes) določajo razrede po­god­be­ne­ga kodeksa, npr. pred­po­go­je ali objektne in­va­ri­an­te, za izpeljane razrede. Kljub tej skupni zna­čil­no­sti obstaja veliko razlik, kot kažejo funk­ci­o­nal­no­sti vmesnikov in ab­strak­tnih razredov.

Razrede pogodb v kodi lahko uporabite za določitev pred­po­go­jev, po­stpo­go­jev in objektnih invariant. Pred­po­go­ji so zahteve, ki morajo biti iz­pol­nje­ne ob vstopu v metodo ali lastnost.

V smislu dedovanja lahko ab­strak­tne razrede poleg ab­strak­tnih metod vsebujejo tudi metode z im­ple­men­ti­ra­nim kodom, medtem ko morajo biti v vmesnikih vse metode ab­strak­tne. Zaradi tega ab­strak­tni razredi za de­kla­ra­ci­jo po­tre­bu­je­jo ključno besedo abstract

Ker C# ne podpira več­kra­tne­ga dedovanja razredov, razred ne more dedovati iz več kot enega ab­strak­tne­ga razreda. Vendar pa lahko razred im­ple­men­ti­ra več vmesnikov, da omogoči večkratno dedovanje vmesnikov.

Ab­strak­tna razreda lahko ima kon­struk­tor­je, ki jih lahko pokličejo izpeljani razredi. Vmesniki ne morejo vsebovati kon­struk­tor­jev, ker niso instance in jih zato ni mogoče ini­ci­a­li­zi­ra­ti.

Vprašanje 6: Kaj so lastnosti v C#?

V C# so lastnosti element razreda, ki omogočajo branje, pisanje ali iz­ra­ču­na­va­nje vrednosti zasebno de­kla­ri­ra­ne­ga polja. Lastnosti se lahko upo­ra­blja­jo za dostop do javnih vmesnikov ali omogočajo spremembe podatkov, shra­nje­nih v razredu.

Lastnosti so temeljni vidik objektno usmer­je­ne­ga pro­gra­mi­ra­nja v C# in se pogosto upo­ra­blja­jo v apli­ka­ci­jah za za­go­ta­vlja­nje čistega in varnega dostopa do podatkov razreda.

De­kla­ri­ra­ni so z uporabo do­sto­pni­kov get in set, ki določajo način branja ali na­sta­vi­tve vrednosti lastnosti. Dostopnik get pridobi vrednost lastnosti, dostopnik set pa nastavi vrednost lastnosti. Lastnost lahko ima enega ali oba do­sto­pni­ka. To je odvisno od tega, ali je (ali bi morala biti) lastnost samo za branje ali za branje/pisanje.

Vprašanje 7: Kaj pomenita boxing in unboxing v C#?

Boxing in unboxing se v C# upo­ra­blja­ta za pretvorbo tipov.

  • Pretvorba iz vre­dno­stne­ga tipa v re­fe­renč­ni tip se imenuje boxing. To je na primer pretvorba pre­pro­ste­ga po­dat­kov­ne­ga tipa, kot je int, v po­dat­kov­ni tip object. Boxing je im­pli­ci­tna pretvorba.
  • Pretvorba iz re­fe­renč­ne­ga tipa v vre­dno­stni tip pa se imenuje unboxing. Unboxing je mogoč le z natančnim vre­dno­stnim tipom, ki je bil prvotno boxiran, na primer pretvorba objekta nazaj v int.

Vprašanje 8: Kaj je enu­me­ra­ti­on (enum) in za kaj se uporablja v C#?

Enum je tip vrednosti z nizom povezanih ime­no­va­nih konstant. Ta skupina se imenuje tudi »seznam enu­me­ra­tor­jev«. V C# so enumi enu­me­ra­tiv­ni po­dat­kov­ni tipi, ki so pri­mi­tiv­ni in jih določi uporabnik. Ključna beseda enum se uporablja za de­kla­ra­ci­jo enu­me­ra­tiv­ne­ga tipa.

Enumi v .NET Fra­mewor­ku se upo­ra­blja­jo za ustvar­ja­nje nu­me­rič­nih konstant. Vsak član enuma je tipa enum, za vsak tip enuma pa je potrebna numerična vrednost. Te vrednosti enuma so ne­spre­men­lji­ve. Enumi se lahko pred­sta­vi­jo kot nizi znakov in ob­de­lu­je­jo kot cela števila.

Privzeti tip elementa seznama je int. Privzeto ima prvi element seznama vrednost 0, vrednost vsakega na­sle­dnje­ga elementa pa se poveča za 1. Vendar pa je te vrednosti mogoče nastaviti tudi ročno, na primer 10 = Vklo­plje­no in 20 = Iz­klo­plje­no.

Vprašanje 9: Kakšna je razlika med Dispose in Finalize v C#?

V C# se obe metodi upo­ra­blja­ta za spro­sti­tev virov.

Metoda Dispose sprosti ne­u­pra­vlja­ne vire, kot so povezave z bazami podatkov, ki jih gostitelj .NET runtime ne upravlja samodejno. Običajno je im­ple­men­ti­ra­na v razredu. Ta pa im­ple­men­ti­ra vmesnik IDi­s­po­sa­ble, ki definira metodo Dispose.

Ta metoda se izrecno pokliče s kodo odjemalca, da se sprostijo viri, ki niso več potrebni. Al­ter­na­tiv­no se lahko im­pli­ci­tno pokliče z izjavo using, kar zagotovi, da se metoda Dispose pokliče, ko objekt izgine iz obsega.

Metoda Finalize pa se uporablja za izvedbo operacij čiščenja objekta tik pred procesom zbiranja smeti. Zato se običajno im­ple­men­ti­ra v razredu, ki nadomesti metodo Object.Finalize.

Vprašanje 10: Katere so prednosti raz­ši­ri­tve­nih metod v C#?

Metode raz­ši­ri­tve omogočajo raz­vi­jal­cem, da razširijo funk­ci­o­nal­nost ob­sto­je­če­ga tipa, ne da bi spre­me­ni­li izvirni tip ali ustvarili nov izpeljani tip. Omogočajo dodajanje metod k ob­sto­je­čim razredom, struk­tu­ram, vmesnikom, enumom itd., tudi če metode prvotno niso bile de­fi­ni­ra­ne znotraj tipa.

Metode raz­ši­ri­tve so de­kla­ri­ra­ne znotraj statične razreda in de­fi­ni­ra­ne kot statične metode, ki imajo edinstven prvi parameter z imenom this. Ta parameter določa tip, ki se razširja, kar omogoča, da se metoda raz­ši­ri­tve pokliče, kot da bi bila metoda instance tega tipa.

Kakšna vprašanja lahko pri­ča­ku­jem na razgovoru za delovno mesto C#?

Če veste, kdo vas bo in­ter­vju­val, boste lažje pred­vi­de­li vrsto vprašanj, ki vam bodo za­sta­vlje­na. Kadroviki včasih nimajo za­do­stne­ga stro­kov­ne­ga znanja za po­glo­blje­ne razprave o spe­ci­a­li­zi­ra­nih področjih, kot so ka­te­go­ri­je ali objekti v C#. Če je in­ter­vju­var tehnični vodja ali član razvojne ekipe, je ver­je­tne­je, da se bodo vprašanja v in­ter­vju­ju nanašala na spe­ci­fič­ne pro­gra­merj­ske koncepte in veščine.

Če je prisoten vodilni arhitekt pro­gram­ske opreme ali spletni raz­vi­ja­lec, je verjetno, da bodo postavili spe­ci­a­li­zi­ra­na vprašanja, še posebej če se pri­ja­vlja­te za delovna mesta, ki presegajo začetno raven. To je zato, ker bodoči sodelavci želijo vedeti, kako jim bo novi član ekipe lahko pomagal pri njihovih vsa­ko­dnev­nih nalogah.

Go to Main Menu