Топ 50 на въпросите и отговорите за интервю за C# (2025 г.)
Въпроси и отговори за интервю за C# за първокурсници и 2/3/5/10 години опит
Ето въпроси и отговори за интервю за C# за по-нови, както и за кандидати с 5 или 10 години опит, за да получат мечтаната работа.
1) Какво е C#?
C# е обектно-ориентиран, безопасен за тип и управляван език, който е компилиран от .Net framework за генериране Microsoft Междинен език.
👉 Безплатно изтегляне на PDF: C# Interview Interview Questions & Answers
2) Обяснете видовете коментари в C# с примери
Една линия
Пример:
//This is a single line comment
ii. Няколко реда (/* */)
Пример:
/*This is a multiple line comment We are in line 2 Last line of comment*/
iii. XML коментари (///).
Пример:
/// summary; /// Set error message for multilingual language. /// summary
3) Могат ли да бъдат изпълнени множество catch блокове?
Не, множество catch блокове от подобен тип не могат да бъдат изпълнени. След като бъде изпълнен правилният catch код, контролът се прехвърля към блока finally и след това кодът, който следва блока finally, се изпълнява.
4) Каква е разликата между public, static и void?
Публично декларираните променливи или методи са достъпни навсякъде в приложението. Статично декларираните променливи или методи са глобално достъпни без създаване на екземпляр на класа. Статичните членове по подразбиране не са глобално достъпни, това зависи от типа на използвания модифициран достъп. Компилаторът съхранява адреса на метода като входна точка и използва тази информация, за да започне изпълнението, преди да бъдат създадени обекти. А Void е модификатор на тип, който заявява, че методът или променливата не връща никаква стойност.
C# въпроси за интервю
5) Какво е обект?
Обектът е екземпляр на клас, чрез който имаме достъп до методите на този клас. Ключовата дума „Ново“ се използва за създаване на обект. Клас, който създава обект в паметта, ще съдържа информация за методите, променливите и поведението на този клас.
6) Дефиниране на конструктори
Конструкторът е функция-член в клас, която има същото име като своя клас. Конструкторът се извиква автоматично, когато се създава обектен клас. Той конструира стойностите на членовете на данните, докато инициализира класа.
7) Какво е назъбени масиви?
Масивът, който има елементи от тип array, се нарича назъбен масив. Елементите могат да бъдат с различни размери и размери. Можем също да наречем назъбен масив като масив от масиви.
8) Каква е разликата между параметрите ref & out?
Аргумент, предаден като ref, трябва да бъде инициализиран, преди да премине към метода, докато параметърът out не трябва да се инициализира, преди да премине към метод.
9) Каква е употребата на израза 'using' в C#?
Блокът „използване“ се използва за получаване на ресурс и обработката му и след това автоматично изхвърляне, когато изпълнението на блока завърши.
10) Какво е сериализация?
Когато искаме да транспортираме обект през мрежа, тогава трябва да преобразуваме обекта в поток от байтове. Процесът на преобразуване на обект в поток от байтове се нарича сериализация. За да може един обект да бъде сериализиран, той трябва да реализира интерфейс ISerialize. Десериализацията е обратният процес на създаване на обект от поток от байтове.
11) Можем ли да използваме командата „тази“ в рамките на статичен метод?
Не можем да използваме „Това“ в статичен метод, защото можем да използваме само статични променливи/методи в статичен метод.
12) Каква е разликата между константи и само за четене?
Постоянните променливи се декларират и инициализират по време на компилиране. Стойността не може да бъде променена след това. Само за четене се използва само когато искаме да присвоим стойността по време на изпълнение.
13) Какво е интерфейсен клас? Дайте един пример за това
Интерфейсът е абстрактен клас, който има само публични абстрактни методи, а методите имат само декларация, но не и дефиниция. Тези абстрактни методи трябва да бъдат внедрени в наследените класове.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { interface Guru99Interface { void SetTutorial(int pID, string pName); String GetTutorial(); } class Guru99Tutorial : Guru99Interface { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID, string pName) { TutorialID = pID; TutorialName = pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Guru99Tutorial pTutor = new Guru99Tutorial(); pTutor.SetTutorial(1,".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
14) Какво представляват типове стойности и референтни типове?
Типът стойност съдържа стойност на данни в собственото си пространство в паметта. Пример
int a = 30;
Референтният тип съхранява адреса на обекта, където се съхранява стойността. Това е указател към друго място в паметта.
string b = "Hello Guru99!!";
15) Какво представляват потребителският контрол и потребителският контрол?
Персонализираните контроли са контроли, генерирани като компилиран код (Dlls), те са по-лесни за използване и могат да се добавят към кутията с инструменти. Разработчиците могат да плъзгат и пускат контроли в своите уеб формуляри. Атрибутите могат, по време на проектиране. Можем лесно да добавим персонализирани контроли към множество приложения (ако са споделени DLL). Така че, ако те са частни, тогава можем да копираме в dll в директорията bin на уеб приложението и след това да добавим препратка и да ги използваме.
Потребителските контроли са много подобни на ASP включващите файлове и са лесни за създаване. Потребителските контроли не могат да се поставят в кутията с инструменти и да се плъзгат – пускат от нея. Те имат свой дизайн и код. Файловото разширение за потребителски контроли е ascx.
16) Какво представляват запечатаните класове в C#?
Ние създаваме запечатани класове, когато искаме да ограничим класа да бъде наследен. Запечатан модификатор, използван за предотвратяване на извличане от клас. Ако насилствено посочим запечатан клас като основен клас, възниква грешка по време на компилиране.
17) Какво е претоварване на метода?
Претоварването на метода е създаване на множество методи с едно и също име с уникални сигнатури в един и същ клас. Когато компилираме, компилаторът използва резолюция при претоварване, за да определи конкретния метод, който да бъде извикан.
18) Каква е разликата между Array и Arraylist?
В масив можем да имаме елементи само от един и същи тип. Размерът на масива е фиксиран при сравнение. To arraylist е подобен на масив, но няма фиксиран размер.
19) Може ли частен виртуален метод да бъде заменен?
Не, защото те не са достъпни извън класа.
20) Опишете модификатора на достъпност „защитен вътрешен“.
Защитените вътрешни променливи/методи са достъпни в рамките на същия сбор, а също и от класовете, които са извлечени от този родителски клас.
21) Какви са разликите между класовете System.String и System.Text.StringBuilder?
System.String е неизменен. Когато променим стойността на низова променлива, тогава се разпределя нова памет за новата стойност и се освобождава предишното разпределение на паметта. System.StringBuilder е проектиран да има концепция за променлив низ, където могат да се извършват различни операции без разпределяне на отделна памет за модифицирания низ.
22) Каква е разликата между System.Array.CopyTo() и System.Array.Clone()?
Използването на Clone()
метод, ние създаваме нов обект масив, съдържащ всички елементи в оригиналния масив и използвайки CopyTo()
метод. Всички елементи от съществуващ масив се копират в друг съществуващ масив. И двата метода изпълняват плитко копиране.
23) Как можем да сортираме елементите на масива в низходящ ред?
Използването на Sort()
методи, последвани от Reverse()
метод.
24) Запишете синтаксиса на C#, за да прихванете изключение
За да уловим изключение, използваме блокове try-catch. Catch блокът може да има параметър от тип system.Exception.
Например:
try { GetAllData(); } catch (Exception ex) { }
В горния пример можем да пропуснем параметъра от оператора catch.
25) Каква е разликата между интерфейс и абстрактен клас?
Интерфейсите имат всички методи, които имат само декларация, но не и дефиниция. В абстрактен клас можем да имаме някои конкретни методи. В един интерфейсен клас всички методи са публични. Абстрактен клас може да има частни методи.
26) Каква е разликата между методите Finalize() и Dispose()?
Dispose()
се извиква, когато искаме даден обект да освободи всички неуправляеми ресурси с тях. от друга страна, Finalize()
се използва за същата цел, но не гарантира събирането на боклука на обект.
27) Какво представляват кръговите препратки?
Циркулярното препращане е ситуация, при която два или повече ресурса са взаимозависими един от друг, причинява състояние на заключване и прави ресурсите неизползваеми.
28) Какво представляват генериците в C#.NET?
Generics се използват за създаване на кодови класове за многократна употреба, за да се намали излишъкът на кода, да се увеличи безопасността на типа и производителността. Използвайки генерични кодове, можем да създаваме класове за събиране. За да създадете обща колекция, пространството от имена System.Collections.Generic трябва да се използва вместо класове като ArrayList в пространството от имена System.Collections. Generics насърчава използването на параметризирани типове.
29) Какво е обектен пул в .NET?
Пулът от обекти е контейнер, съдържащ обекти, готови за използване. Той проследява обекта, който се използва в момента, общия брой обекти в пула. Това намалява разходите за създаване и повторно създаване на обекти.
30) Избройте често използваните типове изключения в .net
ArgumentException, ArgumentNullException, ArgumentOutOfRangeException, ArithmeticException, DivideByZeroException, OverflowException, IndexOutOfRangeException, InvalidCastException, InvalidOperationException, IOEndOfStreamException, NullReferenceException, OutOfMemoryException, StackOverflowException и др.
31) Какво представляват персонализираните изключения?
Понякога има някои грешки, които трябва да бъдат обработени според изискванията на потребителя. За тях се използват персонализирани изключения и се използват дефинирани изключения.
32) Какво представляват делегатите?
Делегатите са едни и същи, в които се намират указателите на функции C++, но единствената разлика е, че те са безопасни за типа, за разлика от указателите на функции. Делегатите са необходими, защото могат да се използват за писане на много по-общи безопасни за типа функции.
33) Как се наследява клас в друг клас в C#?
Двоеточие се използва като оператор за наследяване в C#. Просто поставете двоеточие и след това името на класа.
public class DerivedClass : BaseClass
34) Кой е базовият клас в .net, от който са извлечени всички класове?
System.Object
35) Каква е разликата между отмяна на метод и претоварване на метод?
При отмяната на метода ние променяме дефиницията на метода в производния клас, който променя поведението на метода. Претоварването на метода е създаване на метод със същото име в рамките на един и същ клас, който има различни сигнатури.
36) Какви са различните начини, по които даден метод може да бъде претоварен?
Методите могат да бъдат претоварени, като се използват различни типове данни за параметър, различен ред на параметрите и различен брой параметри.
37) Защо не можете да посочите модификатор на достъпност за методи в интерфейса?
В интерфейса имаме виртуални методи, които нямат дефиниция на метод. Всички методи са там, за да бъдат заменени в производния клас. Ето защо всички те са публични.
38) Как можем да настроим класа да бъде наследен, но да предотвратим отмяна на метода?
Декларирайте класа като публичен и направете метода запечатан, за да предотвратите отмяната му.
39) Какво се случва, ако наследените интерфейси имат противоречиви имена на методи?
Внедряването зависи от вас, тъй като методът е във вашия собствен клас. Може да има проблем, когато методите от различни интерфейси очакват различни данни, но що се отнася до компилатора, вие сте добре.
40) Каква е разликата между структура и клас?
Структурите са променливи от тип стойност, а класовете са референтни типове. Структурите, съхранявани в стека, причиняват допълнителни разходи, но по-бързо извличане. Структурите не могат да се наследяват.
41) Как да използвам nullable типове в .Net?
Типовете стойности могат да приемат или нормалните си стойности, или нулева стойност. Такива типове се наричат nullable типове.
Int? someID = null; If(someID.HasVAlue) { }
42) Как можем да създадем масив със стойности, които не са по подразбиране?
Можем да създадем масив със стойности, които не са по подразбиране, като използваме Enumerable.Repeat.
43) Каква е разликата между операторите „is“ и „as“ в c#?
Операторът "is" се използва за проверка на съвместимостта на обект с даден тип и връща резултата като булев.
Операторът “as” се използва за привеждане на обект към тип или клас.
44) Какво е мултикаст делегат?
Делегат, който има присвоени множество манипулатори, се нарича мултикаст делегат. Всеки манипулатор е присвоен на метод.
45) Какво представляват индексаторите в C# .NET?
Индексаторите са известни като умни масиви в C#. Позволява екземплярите на даден клас да бъдат индексирани по същия начин като масив.
Например:
public int this[int index] // Indexer declaration
46) Каква е разликата между „throw“ и „throw ex“ в .NET?
Изявлението „Throw“ запазва оригиналния стек за грешки, докато „throw ex“ има трасирането на стека от тяхната хвърляща точка. Винаги се препоръчва да използвате „throw“, защото предоставя по-точна информация за грешка.
47) Какво представляват C# атрибутите и тяхното значение?
C# предоставя на разработчиците начин да дефинират декларативни етикети за определени обекти, напр. Клас, метод и т.н. се наричат атрибути. Информацията за атрибута може да бъде извлечена по време на изпълнение с помощта на Reflection.
48) Как да имплементирам сингълтон дизайн шаблон в C#?
В сингълтон модел класът може да има само един екземпляр и осигурява точка за достъп до него глобално.
Например:
Public sealed class Singleton { Private static readonly Singleton _instance = new Singleton(); }
49) Каква е разликата между directcast и ctype?
DirectCast се използва за преобразуване на типа обект, който изисква типът по време на изпълнение да бъде същият като указания тип в DirectCast.
Ctype се използва за преобразуване, където преобразуването е дефинирано между израза и типа.
50) C# кодът управляван или неуправляван код ли е?
C# е управляван код, защото Common language runtime може да компилира C# код в междинен език.
51) Какво е конзолно приложение?
Конзолното приложение е приложение, което може да се стартира в командния ред Windows. За всякакви начинаещ в .Net, изграждането на конзолно приложение в идеалния случай е първата стъпка, за да започнете.
52) Дайте пример за премахване на елемент от опашката
Методът dequeue се използва за премахване на елемент от опашката.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Queue qt = new Queue(); qt.Enqueue(1); qt.Enqueue(2); qt.Enqueue(3); foreach (Object obj in qt) { Console.WriteLine(obj); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("The number of elements in the Queue " + qt.Count); Console.WriteLine("Does the Queue contain " + qt.Contains(3)); Console.ReadKey(); } } }
Тези въпроси за интервюто също ще ви помогнат във вашата viva (устна)