Top 50 C# Interview Questions Flashcards
Kas yra C#?
C# yra moderni objektinio programavimo kalba, kurią sukūrė Microsoft. Ji veikia ant .NET frameworko ir yra labai panaši į JAVA ir C šeimos kalbas. Ši kalba naudojama kurti programinės įrangos komponentus.
Koks yra skirtumas tarp C# ir C programavimų kalbų?
1.
C kalba rašomas procedūrinis kodas.
C# rašomas kodas paremtas objektiniu programavimu.
2.
C kalba palaiko pointerius (nuorodas į kitas kitą duomenų adresus).
Tuo tarpu C# kalboje, pointeriai naudojami tik nesaugioje aplinkoje.
3.
C kalboje nėra autimatinio šiukšlių surinkimo.
C# kalboje yra automatinis šiukšlių surinkimas ir jį vykdo Common Language Runtime (CLR).
4.
C kalba gali būti paleidžiama cross-platform.
C# kalbos paleidimui reikalingas .NET Frameworkas.
5.
Abstrakcija - tai yra objektinio programavimo kalbos principas, kuomet yra paslepiamos implementavimo detalės parodant tik svarbiausias objekto savybes.
Naudojant C kalbą, pasiekiama žemo lygio abstrakcija.
C# kalboje galime pasiekti aukšto lygio abstrakciją.
6.
C kalba remiasi daugiau funkcijomis.
c# kodas labiau orientuotas į dizainą.
7.
C kalba daugiau naudojama komercijoje ir inžinerijoje.
C# kalba daugiau naudojama programinės įrangos kūrime.
Kas yra Common Language Runtime (CLR)?
CLR arba Bendra kalbos vartojimo trukmė yra virtualioji mašina, taikanti .NET sistemos veikimo aplinką. Kiekviena .NET sistemos versija susideda is CLR. Jis gali vykdyti bet kokią .NET sistemoje parašytą programą, nepriklausomai nuo programavimo kalbos.
.NET sistemoje parašytas kodas verčiamas į tarpinį kodą - Microsoft tarpine kalba (MIL). Toliau “just-in-compiler” (JIT) perverčia į kompiuterio mašinos kodą. Kompiuteris šią kalbą suprasdamas gali atlikti parašytas užduotis.
CLR privalumai:
- integracija tarp kalbų;
-išimčių tvarkymą;
-sustiprintas saugumas;
-diegimo palaikymas;
Kas yra indeksai ir indeksavimas C# .NET?
Indeksas yra specialus savybės tipas, kuris leidžia klasei ar struktūrai būt prieinama kaip masyvui
Koks yra JIT kompiliatoriaus procesas ?
Just-In-Time compiler (JIT) yra Common Language Runtime (CLR) dalis .NET frameworke, kuris yra atsakingas už .NET programų vykdymą nesvarbu, kokia .NET kalba tai būtų parašyta. .NET kodas pirma perverčiamas į Microsoft suprantamą kodą (MIT), o tuomet į mašinoms suprantamą kodą. Paskutinį virsmą atlieka Just-In-Time (JIT) kompileris. Šis kodas yra specifiškas mašinos aplinkai, kurioje ir veikia JIT.
Kas yra šiukšlių surinkimas C#?
Šiukšlių surinkimas įgalina automatinį atminties valdymą. Kuomet yra sukuriamas objektas, tam tikra vieta atmintyje yra rezervuojama būtent jam ir su jo kūrimu susijusiem veiksmam. Tačiau po to, kai yra baigiamas objekto kūrimas ši atmintis nebeatsilaisvina ir negali būti pernaudota. Tokiu atveju šiukšlių surinkimas automatiškai atlaisvina atmintį, kurios po tokių veiksmų daugiau nebereikia.
Šiukšlių surinkimas aktyvuojamas kai patenkinama bent viena sąlyga:
- jei sistema turi mažai fizinės atminties, tokiu atveju šiukšlių surinkimas yra būtinas.
- jei objektų kūrimui numatytas atminties kiekis yra viršijamas, įsijungia šiukšlių surinkimas.
- jei iškviečiamas GC.Collect metodas, tačiau šis metodas kviečiamas tik esant neįprastomis sąlygomis, nes dažniausiai šiukšlių surinkimas įsijungiam automatiškai.
Kokie būna klasių tipai C#?
Abstract klasė
Partial klasė
Sealed klasė
Static klasė
Kokie yra abstrakčios klasės ir interfaso skirtumai?
Abstract Class (a) Interface (i)
1.
(a) klasėje nurodomas ir deklaravimas ir išpildymas.
(i) Interface nurodomas tik deklaravimas.
_______________________________
2.
(a) Negalima paveldėti keletos klasių.
(i) Galima implementuoti keletą interfasų.
______________________________
3.
(a) Klasėje yra konstruktorius
(i) Interfase nėra konstruktoriaus.
____________________________
4.
(a) Klasėje gali būti statinių narių
(i) Interfase nėra statinių narių
_____________________________
5.
(a) Klasėje gali būti skirtingų tipų prieigos modifikatorių kaip public, private, protected ir kt.
(i) Interface yra tik public prieigos modifikatoriai, nes viskas interface yra public.
_____________________________
6.
(a) Abstrakcios klasės veikimas yra greitas.
(i) Interfasu veikimas yra lėtas, nes atitinkamų metodų ieškojimas tam tikroje klasėje reikalauja laiko.
____________________________
7.
(a) Klasė skirta implemetuoti pagrindinį klasės identitetą.
(i) Interface skirtas tam tikrom klasės galimybėms aprašyti.
_________________________________
8.
(a) Galima naudoti tik vieną abstrakčią klasę.
(i) Klasė galim implementuoti keletą interfasų.
________________________________
9.
(a) Jei dauguma implementacijų yra tos pačios rūšies ir veikimo, tuomet verta naudoti abstrakčią klasę.
(i) Jei dauguma implementacijų naudoja tik tuos pačius metodus, tada verta naudoti interface.
_______________________________
10.
(a) Abstrakti klasė gali savyje turėti metodus, laukus, constantas ir kt.
(i) Interface savyje gali turėti tik metodus.
________________________________
11.
(a) Klasė gali būti pilnai, dalinai ar visai neimplementuota.
(i) Interface turi būti pilnai implementuotas.
Kas yra extension metodas C#?
Extension metodo konceptas leidžia pridėti naujus metodus esamoje klasėje bet nekoreguojant jau esamo kodo. Taip pat šiam metodui nereikia jokių specialių leidimų iš pagrindinės klasės, o taip pat nereikia jos re-compilint.
Pirmas perduodamasa parametras turi būtit “this Class class”. Class ir class yra klasės pavadinimas prie kurios norim pridėti šį metodą.
Kas yra paveldėjimas? Ar C# palaiko daugkartinį paveldėjimą?
Paveldėjimas yra svarbi objektinio programavimo dalis. Tai yra mechanizmas, kuomet viena klasė gali paveldėti savybes (fields ir metodus) iš kitos klasės.
Super klasė: klasė, kurios savybės yra paveldimos. Dar vadinama bazine klase, tėvine klase.
Sub klasė: klasė, kuri paveldi kitos klasės savybes, dar vadinama vaikine klase, išvestine klase. Vaikinė klasė gali prisidėti savo papildomų savybių ir metodų šalia paveldėtų.
Pernaudojimas: paveldėjimas suteikia kodui galimybę jį pernaudoti t.y. kai mes norime sukurti naują klasę, bet jau turime klasę, kurioje yra šiek tiek kodo, kuris tiktų ir šioje klasėje, mes galime paveldėti šią klasę ir pernaudoti tik tuos metodus ir savybes, kurias mum reikia.
Kas yra Managed ar Unmanaged kodas?
Kodas, kuris yra parašytas .NET frameworke yra priimtinas kaip “managed code”. Kodas yra tiesiogiai vykdomas CLR. Managed runtime aplinka gali pasiūlyti tokių paslaugų kaip šiušlių surinkimas, tipų tikrinimas, exceptionų pagavimas ir kt. ir tam nereik jokių trečios šalies papildinių. Kodas kuris parašytas Java, C# kalbomis visada yra priimtas kaip managed code.
Kodas, kuris gali būti vykdomas operacinės sistemos yra priimtas kaip “unmanaged”. Jis yra skirtas ir nutaikytas į procesoriaus architektūrą ir priklauso nuo kompiuterio architektūros. Norint pritaikyti tą patį kodą kitaip architektūrai, jį visada reik iš naujo kompiliuoti, nes kiekviena architektūra turi specifinį unmanaged codą.
Koks skirtumas yra tarp struktūros ir klasės?
Klasė yra vartotojo aprašytas šablonas ar prototipas, iš kurio yra kuriami objektai. Iš esmės klasė sukompiliuoja klases ir savybes į vieną vienetą (objektą).
Struktūra yra įvairių duomenų tipų kolekcija sudėta į vieną vienetą. Gana panašu į klasę, nes abu jie yra vartotojo aprašyti, abu savyje laiko daug skirtingų duomenų tipų.
Kas yra enum C#?
Enumeratorius (ar enum) yra reikšmių duomenų tipas. Pagrinde naudojamas priskirti pavadinimus iš eilės einantiem skaičiam, o tai padaro programą paprasta skaityti ir koreguoti. Dažniausiai enum’e aprašomos reikšmės yra iš anksto žinomos ir nesikeičiančios kaip savaitės dienos, metų laikai ir pan.
Kuo skiriasi ref ir out raktiniai žodžiai?
Raktinis žodis ‘ref’ yra skirtas paduoti argumentus per referencą. Tarkim jei yra padaromi pakeitimai šiom reikšmėm metode, kuriame jie yra kai argumentai, tai reikšmės atsispindės pradiniame kode.
Out raktažodis yra labai panašus kaip ‘ref’ raktažodis, bet labiau naudojamas grąžinti (return) keletai reikšmių kaip pvz tryParse metode.
Abu šie metodai neperduoda pačio kintamojo, bet tik jį atspindi.
Kas yra Boxing ir Unboxing C#?
C# tipų sistemoje yra pagrininiai trys duomenų tipai: reikšmių tipai (int, char, double ir kt.), reference type (objects) ir pointerių tipas. Iš esmės boxingas ir unboxingas yra konceptas kuomet verčiame reikšmių (value) tipą į pvz objektą ir atvirkščiai. Šis konceptas leidžia į tipų sistemą žiūrėti taip lyg bet kurio tipo reikšmė gali būti priimama kaip objektas.
Boxingo (implicit convertion) metu value tipą verčiant į reference tipą, value tipas visada saugomas stacke, o referenso tipas laikomas heape.
Unboxingas yra explicit convertion ir vyksta kuomet objektas verciamas į value tipą.
Kas yra savybės (properties) C#?
Savybės yra specialus klasės dalyvis leidžiantis paprastai skaityti, koreguoti ar skaičiuoti reikšmes. Jom yra priskiriami iš anksto nustatyti metodai (accesor) get ir set, kurie leidžia prieiti ir modifikuoti šias savybes taip kaip mum patinka, pvz read-only savybės turi tik get metodą.
Kas yra dalinė (partial) klasė C#?
Dalinė klasė yra ypatinga C# savybė. Ji suteikia galimybę implemetuoti vienos klasės funkcionalumą į keletą failų, bet kai aplikacija sukompiliuojama, šie failai tampa viena klase.
Jei Voldemortas būtų klasė , tai kiekvienas horokrusas būtų dalinė klasė (vienas iš daugelio failų). Po kompiliacijos visi horokrusai taptų tiesiog Voldemortu.
Dalinė klasė sukuriama naudojant “partial” raktažodį. Šis raktažodis naudingas skaidant metodų, interfacų ar strukturų funkcionalumą į keletą failų:
public partial Class_name
{
// Code
}
Koks yra skirtumas tarp late binding ir early binding C# kalboje?
Early binding: Visual Basic kompileris atlieka procesą vadinamą surišimu (binding), kuomet objektas yra priskiriamas tam tikram kintamajam. Objektas yra early bound, kuomet jis yra priskiriamas tam tikro TIKSLAUS tipo kintamajams. Early bind objektai leidžia kompileriui rezervuoti atminties ir atlikti kitus optimizacijos veiksmus prieš paleidžiant aplikaciją.
Palyginimui - objektas yra late bound kuomet jis yra priskiriamas Object tipo kintamajam. Šio tipo objektai gali turėtų įvairių sąsajų su kitais objektais, todėl tipas bus nustatytas tik kompiliavimo metu. Late binding negali naudotis visual studio siūlomom pagalbom, pvz kaip auto-completion, nes tai vyksta tik žinant tikslų kintamojo tipą.
Early binding procesas yra žymiai greitesnis nei late binding.
Kokius žinote būdus overloadint metodus C#?
Metodų overloadinimas yra gana dažnas būdas implemetuoti polimorfizmą. Tai yra galimybė aprašyti tą patį metodą kita forma. Vartotojas gali aprašyti funkciją kurios pavadinimas bus toks pats, tačiau skirsis paduodami parametrai, jų tvarka, parametrų tipai ir kt. tačiau negali pasikartoti metodo kurio parametrai, jų išdėstymas ir tipai bus tokie pat kaip kito metodo toje pačioje klasėje.
What is Reflection in C#?
Reflection is the process of describing the metadata of types, methods, and fields in a code. The namespace System. Reflection enables you to obtain data about the loaded assemblies, the elements within them like classes, methods, and value types.