Od jednoduchých otázok o výhodách jazyka C# až po vysvetlenie rôznych prvkov programovacieho jazyka a ich použitia – vytvorili sme zoznam 10 najdôležitejších otázok pre pracovný pohovor v oblasti C#.

Tento článok poukazuje na desať najčastejších otázok, ktoré sa kladú počas pracovného pohovoru na pozíciu vývojára. Pridali sme aj odpovede na každú z týchto otázok. Hoci sa tieto otázky týkajú rôznych tém, od jednoduchých po podrobné, existuje mnoho ďalších potenciálnych otázok o jazyku C# a jeho špeciálnych funkciách.

Tento článok poskytuje úvodný prehľad rôznych otázok, ktoré môžu byť položené, od jednoduchých až po špecifickejšie otázky, ktoré vyžadujú určité podrobnosti. Tento článok vám tiež pomôže pochopiť, ako sa pripraviť na pohovor, ktorého cieľom je otestovať vaše znalosti konkrétneho programovacieho jazyka.

Otázka 1: Aké sú špeciálne vlastnosti jazyka C# a aké výhody ponúka tento programovací jazyk?

Vďaka špeciálnemu vývojovému prostrediu Visual Studio je jazyk C# navrhnutý tak, aby bol rýchly. Ako objektovo orientovaný programovací jazyk boduje C# aj svojou jednoduchou a modernou vývojovou platformou, ktorá je univerzálna a výkonná. Preto sa mnohí vývojári pri výbere programovacieho jazyka, ktorý sa budú učiť, rozhodujú pre C#.

C# je v podstate štruktúrovaný okolo tried a objektov a prísne dodržiava princípy typovania. Poskytuje funkcie ako abstrakcia, zapuzdrenie a dedičnosť. Tento programovací jazyk je primárne určený na vývoj v rámci ekosystému Microsoft .NET.

Vďaka svojej kompatibilite s platformou .NET má jazyk C# vlastnú štruktúru, v ktorej mnohé typy v rámci štruktúr .NET dedia z triedy objektov. Výsledkom je, že tieto triedy dedia metódy, vlastnosti, polia a udalosti. Táto hierarchická štruktúra uľahčuje konzistentnosť a interoperabilitu v rámci ekosystému .NET.

Otázka 2: Čo znamená klasifikácia „objekt“ v jazyku C#?

Porozumenie objektom v jazyku C# závisí od pochopenia základných princípov tohto jazyka. V podstate je C# objektovo orientovaný programovací jazyk, v ktorom triedy slúžia ako základ. Trieda vymedzuje štruktúru dát a určuje, ako sa v jazyku C# ukladajú, spravujú a prenášajú. V podstate slúži ako vzor pre všetky ostatné dátové štruktúry.

Objekty sú reálne prvky v jazyku C#, ktoré tiež zaujímajú reálne hodnoty v dostupnej pamäti. Za objekty možno považovať všetky entity, ktoré majú veľmi špecifické vlastnosti alebo vykonávajú špecifickú úlohu v rámci softvéru. Typ objektu je definovaný triedou a inštancie tried tvoria rámec pre ich ďalšiu štruktúru.

Predpokladajme napríklad, že navrhujeme program zameraný na televíziu. Najskôr musíme ako východiskový bod definovať entitu. V tomto prípade by sme mohli vytvoriť triedu „Televízia“. V rámci tejto triedy chceme definovať päť vlastností: výrobca, model, farba, veľkosť a cena. Tieto vlastnosti sú členmi triedy. Ďalšími členmi triedy môžu byť udalosti, metódy alebo polia, ktoré spolu tvoria objekt.

Ak chceme naprogramovať Sony Bravia ako inštanciu televízora, môžeme pri vytváraní tohto objektu špecifikovať vlastnosti Sony, Bravia, Black, 50 a 500. Tým sa definujú informácie o výrobcovi, modeli, farbe, veľkosti a cene. Televízor Sony je teda inštanciou triedy Television. Aby bola táto trieda prístupná, je dôležité definovať ju ako verejnú, a nie ako súkromnú alebo chránenú.

Otázka 3: Aký je rozdiel medzi spravovaným a nespravovaným kódom v jazyku C#?

Spravovaný kód

Spravovaný kód v jazyku C# je všetok kód vytvorený pomocou prostredia .NET Framework. Tento typ kódu je vykonávaný priamo prostredníctvom Common Language Runtime (CLR). CLR spravuje životný cyklus kódu, vrátane vytvárania objektov, alokácie pamäte a likvidácie objektov.

Nespravovaný kód

Kód vyvinutý mimo prostredia .NET Framework sa označuje ako nespravovaný kód. Táto kategória zahŕňa všetky aplikácie, ktoré nie sú vykonávané pod kontrolou CLR.

.NET Framework poskytuje funkciu, ktorá dokáže previesť nespravovaný kód na spravovaný kód a naopak. Táto funkcia je obzvlášť užitočná, pretože uľahčuje plynulú integráciu vytvárania a vykonávania objektov, ako aj likvidáciu kódu v rámci frameworku.

Otázka 4: Aký je rozdiel medzi štruktúrou a triedou?

V jazyku C# sa pojmy trieda (class) a štruktúra (struct) vzťahujú na používateľom definované datové typy. Tieto datové typy sa však v niektorých základných aspektoch líšia.

Štruktúra

  • Ako typ hodnoty v C#, štruktúry vždy implicitne dedia z System.ValueType.
  • Štruktúry nemôžu byť odvodené od iných typov.
  • Spravidla sa štruktúra používa pre menšie množstvá údajov.
  • Štruktúry nemôžu byť abstraktné a ako také vyžadujú priamu implementáciu.
  • Nie je možné priradiť štandardný konštruktor k štruktúre.
  • Vytvorenie objektu pomocou kľúčového slova new nie je povinné.

Trieda

  • Ako referenčný typ v jazyku C#, triedy vždy implicitne dedia z System.Object.
  • Triedy môžu byť odvodené od iných tried, čo umožňuje dedičnosť.
  • Spravidla sa trieda používa pre väčšie množstvá údajov alebo zložitejšie štruktúry.
  • Triedy môžu byť abstraktné, čo znamená, že neumožňujú priamu inštanciáciu.
  • Na rozdiel od štruktúr môžu triedy mať štandardný konštruktor, ak ho potrebujú.

Otázka 5: Aký je rozdiel medzi rozhraním a abstraktnou triedou v jazyku C#?

Rozhrania (interfaces) a abstraktné triedy (abstract classes) špecifikujú triedy kódových zmlúv, napr. predpoklady alebo invarianty objektov, pre odvodené triedy. Napriek tejto podobnosti existuje mnoho rozdielov, ako ukazuje funkčnosť rozhraní a abstraktných tried.

Triedy kódových zmlúv sa dajú použiť na špecifikovanie predpokladov, následných podmienok a objektových invariantov. Predpoklady sú požiadavky, ktoré musia byť splnené pri vstupe do metódy alebo vlastnosti.

Pokiaľ ide o dedičnosť, abstraktné triedy môžu obsahovať metódy s implementovaným kódom okrem abstraktných metód, zatiaľ čo rozhrania vyžadujú, aby všetky metódy boli abstraktné. Z tohto dôvodu abstraktné triedy potrebujú na deklaráciu kľúčové slovo abstract

Keďže C# nepodporuje viacnásobné dedičstvo tried, trieda nemôže dediť z viac ako jednej abstraktnej triedy. Trieda však môže implementovať viacero rozhraní, aby umožnila viacnásobné dedičstvo rozhraní.

Abstraktná trieda môže mať konštruktory, ktoré môžu byť vyvolané odvodenými triedami. Rozhrania nemôžu obsahovať konštruktory, pretože nie sú inštanciami a preto nemôžu byť inicializované.

Otázka 6: Čo sú vlastnosti v jazyku C#?

V jazyku C# sú vlastnosti prvkom triedy, ktorý umožňuje čítať, zapisovať alebo vypočítavať hodnotu súkromne deklarovaného poľa. Vlastnosti sa dajú použiť na prístup k verejným rozhraniam alebo na povolenie zmien údajov uložených v triede.

Vlastnosti sú základným aspektom objektovo orientovaného programovania v jazyku C# a bežne sa používajú v aplikáciách na zabezpečenie čistého a bezpečného prístupu k dátam triedy.

Sú deklarované pomocou prístupových metód get a set, ktoré definujú správanie pri čítaní alebo nastavovaní hodnoty vlastnosti. Prístupová metóda get načíta hodnotu vlastnosti, zatiaľ čo prístupová metóda set nastaví hodnotu vlastnosti. Vlastnosť môže mať jednu alebo obe prístupové metódy. Závisí to od toho, či je (alebo by mala byť) vlastnosť len na čítanie alebo na čítanie/zapisovanie.

Otázka 7: Čo sa rozumie pod pojmami boxing a unboxing v jazyku C#?

Boxing a unboxing sa v jazyku C# používajú na konverzie typov.

  • Premena z hodnotového typu na referenčný typ sa nazýva boxing. Môže to byť napríklad premena jednoduchého dátového typu, ako je int, na dátový typ object. Boxing je implicitná premena.
  • Premena z referenčného typu na hodnotový typ sa naopak nazýva unboxing. Unboxing sa môže uskutočniť len s presným hodnotovým typom, ktorý bol pôvodne boxovaný, napríklad premena objektu späť na int.

Otázka 8: Čo je výpočet (enum) a na čo sa používa v jazyku C#?

Enum je typ hodnoty so súborom súvisiacich pomenovaných konštánt. Táto skupina sa tiež označuje ako „zoznam enumerátorov“. V jazyku C# sú enumy enumerované datové typy, ktoré sú primitívne a definované používateľom. Kľúčové slovo enum sa používa na deklarovanie enumerácie.

Enumy v prostredí .NET Framework sa používajú na vytváranie číselných konštánt. Každý člen enumu je typu enum a pre každý typ enumu je potrebná číselná hodnota. Tieto hodnoty enumu sú nemenné. Enumy môžu byť reprezentované ako reťazce znakov a manipulované ako celé čísla.

Predvolený typ prvku výpočtu je int. Predvolene má prvý výpočet hodnotu 0 a hodnota každého ďalšieho výpočtu sa zvyšuje o 1. Tieto hodnoty však možno nastaviť aj ručne, napríklad 10 = Zapnuté a 20 = Vypnuté.

Otázka 9: Aký je rozdiel medzi Dispose a Finalize v C#?

V jazyku C# sa obe metódy používajú na uvoľnenie zdrojov.

Metóda Dispose uvoľňuje nespravované zdroje, ako sú databázové pripojenia, ktoré nie sú automaticky spravované hostiteľom prostredia .NET. Zvyčajne je implementovaná v triede. Tá zase implementuje rozhranie IDisposable, ktoré definuje metódu Dispose.

Táto metóda je explicitne volaná klientským kódom na uvoľnenie zdrojov, ktoré už nie sú potrebné. Alternatívne ju možno implicitne vyvolať pomocou príkazu using, čím sa zabezpečí, že metóda Dispose bude volaná, keď objekt vyjde z rozsahu.

Metóda Finalize sa naopak používa na vykonanie operácií čistenia objektu tesne pred spustením procesu zbierania odpadu. V dôsledku toho sa zvyčajne implementuje v triede, ktorá prepisuje metódu Object.Finalize.

Otázka 10: Aké sú výhody metód rozšírenia v jazyku C#?

Metódy rozšírenia umožňujú vývojárom rozšíriť funkčnosť existujúceho typu bez zmeny pôvodného typu alebo vytvorenia nového odvodeného typu. Umožňujú pridávať metódy do existujúcich tried, štruktúr, rozhraní, výčtov atď., aj keď tieto metódy neboli pôvodne definované v rámci typu.

Metódy rozšírenia sú deklarované v statickej triede a definované ako statické metódy s jedinečným prvým parametrom s názvom this. Tento parameter špecifikuje typ, ktorý sa rozširuje, čím umožňuje vyvolanie metódy rozšírenia tak, ako keby to bola inštančná metóda tohto typu.

Aké otázky môžem očakávať na pohovore týkajúcom sa jazyka C#?

Ak viete, kto vás bude interviewovať, môžete získať lepší prehľad o povahe otázok, ktoré vám budú kladené. Niekedy personalisti nemajú dostatočné znalosti na to, aby mohli viesť hlboké diskusie o špecializovaných oblastiach, ako sú kategórie alebo objekty v C#. Ak je teda interviewer technický vedúci alebo člen vývojárskeho tímu, je pravdepodobnejšie, že otázky v rozhovore sa budú týkať konkrétnych programovacích konceptov a zručností.

Ak je prítomný hlavný softvérový architekt alebo webový vývojár, je pravdepodobné, že vám budú klásť špecializované otázky, najmä ak sa uchádzate o pozíciu nad rámec vstupnej úrovne. Je to preto, že budúci kolegovia chcú vedieť, ako im nový člen tímu bude môcť pomáhať pri ich každodenných úlohách.

Prejsť na hlavné menu