50 câu hỏi và câu trả lời phỏng vấn C# hàng đầu (2025)
Câu hỏi và câu trả lời phỏng vấn C# dành cho người mới bắt đầu và 2/3/5/10 năm kinh nghiệm
Dưới đây là các câu hỏi và câu trả lời phỏng vấn C# dành cho những ứng viên mới ra trường cũng như những ứng viên có kinh nghiệm 5 hoặc 10 năm để có được công việc mơ ước của họ.
1) C# là gì?
C# là ngôn ngữ hướng đối tượng, an toàn kiểu và được quản lý, được biên dịch bởi .Net framework để tạo ra Microsoft Ngôn ngữ Trung gian.
👉 Tải xuống bản PDF miễn phí: Câu hỏi và câu trả lời phỏng vấn phỏng vấn C#
2) Giải thích các loại nhận xét trong C# với các ví dụ
Dòng đơn
Ví dụ:
//This is a single line comment
ii. Nhiều dòng (/* */)
Ví dụ:
/*This is a multiple line comment We are in line 2 Last line of comment*/
iii. Nhận xét XML (///).
Ví dụ:
/// summary; /// Set error message for multilingual language. /// summary
3) Có thể thực thi nhiều khối bắt không?
Không, nhiều khối bắt cùng loại không thể được thực thi. Sau khi mã bắt thích hợp được thực thi, điều khiển sẽ được chuyển sang khối cuối cùng và sau đó mã theo sau khối cuối cùng sẽ được thực thi.
4) Sự khác biệt giữa công khai, tĩnh và trống là gì?
Các biến hoặc phương thức được khai báo công khai có thể truy cập được ở bất kỳ đâu trong ứng dụng. Các biến hoặc phương thức được khai báo tĩnh có thể truy cập được trên toàn cầu mà không cần tạo một thể hiện của lớp. Thành viên tĩnh theo mặc định không thể truy cập được trên toàn cầu, tùy thuộc vào loại quyền truy cập được sửa đổi được sử dụng. Trình biên dịch lưu địa chỉ của phương thức làm điểm vào và sử dụng thông tin này để bắt đầu thực thi trước khi bất kỳ đối tượng nào được tạo. Và Void là một công cụ sửa đổi kiểu cho biết phương thức hoặc biến không trả về bất kỳ giá trị nào.
Câu hỏi phỏng vấn C#
5) Vật là gì?
Một đối tượng là một thể hiện của một lớp mà qua đó chúng ta truy cập các phương thức của lớp đó. Từ khóa “Mới” được sử dụng để tạo một đối tượng. Một lớp tạo một đối tượng trong bộ nhớ sẽ chứa thông tin về các phương thức, biến và hành vi của lớp đó.
6) Xác định hàm tạo
Hàm tạo là một hàm thành viên trong một lớp có cùng tên với lớp của nó. Hàm tạo được tự động gọi bất cứ khi nào một lớp đối tượng được tạo. Nó xây dựng các giá trị của các thành viên dữ liệu trong khi khởi tạo lớp.
7) Mảng răng cưa là gì?
Mảng có các phần tử kiểu mảng được gọi là mảng lởm chởm. Các phần tử có thể có kích thước và kích cỡ khác nhau. Chúng ta cũng có thể gọi Mảng lởm chởm là Mảng của các mảng.
8) Sự khác biệt giữa các tham số ref và out là gì?
Một đối số được truyền dưới dạng ref phải được khởi tạo trước khi truyền sang phương thức trong khi tham số out không cần phải được khởi tạo trước khi truyền sang một phương thức.
9) Công dụng của câu lệnh 'using' trong C# là gì?
Khối 'đang sử dụng' được sử dụng để lấy tài nguyên và xử lý nó, sau đó tự động loại bỏ khi quá trình thực thi khối hoàn tất.
10) Tuần tự hóa là gì?
Khi chúng ta muốn vận chuyển một đối tượng qua mạng, thì chúng ta phải chuyển đổi đối tượng đó thành một luồng byte. Quá trình chuyển đổi một đối tượng thành luồng byte được gọi là Tuần tự hóa. Để một đối tượng có thể tuần tự hóa, nó phải triển khai Giao diện ISerialize. Khử tuần tự hóa là quá trình ngược lại của việc tạo một đối tượng từ một luồng byte.
11) Chúng ta có thể sử dụng lệnh “this” trong một phương thức tĩnh không?
Chúng tôi không thể sử dụng 'Cái này' trong một phương thức tĩnh vì chúng tôi chỉ có thể sử dụng các biến/phương thức tĩnh trong một phương thức tĩnh.
12) Sự khác biệt giữa hằng số và chỉ đọc là gì?
Các biến không đổi được khai báo và khởi tạo tại thời điểm biên dịch. Giá trị không thể thay đổi sau đó. Chỉ đọc chỉ được sử dụng khi chúng ta muốn gán giá trị trong thời gian chạy.
13) Lớp giao diện là gì? Hãy cho một ví dụ về nó
Giao diện là một lớp trừu tượng chỉ có các phương thức trừu tượng công khai và các phương thức này chỉ có phần khai báo chứ không có định nghĩa. Những phương thức trừu tượng này phải được triển khai trong các lớp kế thừa.
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) Loại giá trị và loại tham chiếu là gì?
Một loại giá trị chứa một giá trị dữ liệu trong không gian bộ nhớ của chính nó. Ví dụ
int a = 30;
Kiểu tham chiếu lưu trữ địa chỉ của Đối tượng nơi giá trị đang được lưu trữ. Nó là một con trỏ tới một vị trí bộ nhớ khác.
string b = "Hello Guru99!!";
15) Kiểm soát tùy chỉnh và Kiểm soát người dùng là gì?
Custom Controls là các control được tạo ra dưới dạng mã biên dịch (Dll), chúng dễ sử dụng hơn và có thể được thêm vào toolbox. Các nhà phát triển có thể kéo và thả các control vào biểu mẫu web của họ. Các thuộc tính có thể, tại thời điểm thiết kế. Chúng ta có thể dễ dàng thêm các control tùy chỉnh vào Nhiều ứng dụng (nếu là DLL được chia sẻ). Vì vậy, nếu chúng là private, thì chúng ta có thể sao chép vào dll vào thư mục bin của ứng dụng web rồi thêm tham chiếu và có thể sử dụng chúng.
User Controls rất giống với ASP include files và dễ tạo. User controls không thể được đặt trong hộp công cụ và kéo – thả từ đó. Chúng có thiết kế và code-behind riêng. Phần mở rộng tệp cho user control là ascx.
16) Các lớp kín trong C# là gì?
Chúng ta tạo các lớp kín khi muốn hạn chế lớp được kế thừa. Công cụ sửa đổi kín được sử dụng để ngăn chặn việc bắt nguồn từ một lớp. Nếu chúng ta buộc phải chỉ định một lớp seal làm lớp cơ sở thì sẽ xảy ra lỗi thời gian biên dịch.
17) Quá tải phương thức là gì?
Nạp chồng phương thức là tạo nhiều phương thức có cùng tên với các chữ ký duy nhất trong cùng một lớp. Khi chúng tôi biên dịch, trình biên dịch sử dụng độ phân giải quá tải để xác định phương thức cụ thể sẽ được gọi.
18) Sự khác biệt giữa Array và Arraylist là gì?
Trong một mảng, chúng ta chỉ có thể có các mục cùng loại. Kích thước của mảng được cố định khi so sánh. Danh sách mảng tương tự như mảng nhưng không có kích thước cố định.
19) Phương thức ảo riêng tư có thể bị ghi đè không?
Không, bởi vì chúng không thể truy cập được bên ngoài lớp học.
20) Mô tả công cụ sửa đổi khả năng truy cập “nội bộ được bảo vệ”.
Các biến/phương thức nội bộ được bảo vệ có thể truy cập được trong cùng một hợp ngữ và cả từ các lớp dẫn xuất từ lớp cha này.
21) Sự khác biệt giữa các lớp System.String và System.Text.StringBuilder là gì?
System.String là bất biến. Khi chúng ta sửa đổi giá trị của biến chuỗi thì bộ nhớ mới sẽ được cấp phát cho giá trị mới và việc cấp phát bộ nhớ trước đó sẽ được giải phóng. System.StringBuilder được thiết kế để có khái niệm về một chuỗi có thể thay đổi trong đó nhiều hoạt động khác nhau có thể được thực hiện mà không cần phân bổ vị trí bộ nhớ riêng cho chuỗi đã sửa đổi.
22) Sự khác biệt giữa System.Array.CopyTo() và System.Array.Clone() là gì?
Sử dụng Clone()
phương thức này, chúng ta tạo một đối tượng mảng mới chứa tất cả các phần tử trong Mảng ban đầu và sử dụng CopyTo()
phương pháp. Tất cả các phần tử của mảng hiện có sẽ sao chép vào một mảng hiện có khác. Cả hai phương pháp đều thực hiện một bản sao nông.
23) Làm cách nào để sắp xếp các phần tử của Mảng theo thứ tự giảm dần?
Sử dụng Sort()
các phương pháp tiếp theo Reverse()
phương pháp.
24) Viết cú pháp C# để bắt ngoại lệ
Để bắt ngoại lệ, chúng tôi sử dụng khối thử bắt. Khối bắt có thể có tham số thuộc loại system.Exception.
Ví dụ:
try { GetAllData(); } catch (Exception ex) { }
Trong ví dụ trên, chúng ta có thể bỏ qua tham số khỏi câu lệnh bắt.
25) Sự khác biệt giữa giao diện và lớp trừu tượng là gì?
Các giao diện có tất cả các phương thức chỉ có khai báo nhưng không có định nghĩa. Trong một lớp trừu tượng, chúng ta có thể có một số phương thức cụ thể. Trong một lớp giao diện, tất cả các phương thức đều công khai. Một lớp trừu tượng có thể có các phương thức riêng tư.
26) Sự khác biệt giữa phương thức Finalize() và Dispose() là gì?
Dispose()
được gọi khi chúng ta muốn một đối tượng giải phóng bất kỳ tài nguyên không được quản lý nào cùng với chúng. Mặt khác, Finalize()
được sử dụng cho cùng một mục đích, nhưng nó không đảm bảo việc thu gom rác của một đối tượng.
27) Tài liệu tham khảo vòng tròn là gì?
Tham chiếu vòng là tình huống trong đó hai hoặc nhiều tài nguyên phụ thuộc lẫn nhau gây ra tình trạng khóa và khiến tài nguyên không thể sử dụng được.
28) Generics trong C#.NET là gì?
Generic được sử dụng để tạo các lớp mã có thể tái sử dụng nhằm giảm sự dư thừa của mã, tăng tính an toàn của kiểu và hiệu suất. Sử dụng generic, chúng ta có thể tạo các lớp bộ sưu tập. Để tạo bộ sưu tập chung, không gian tên System.Collections.Generic nên được sử dụng thay cho các lớp như ArrayList trong không gian tên System.Collections. Generic thúc đẩy việc sử dụng các kiểu tham số.
29) Nhóm đối tượng trong .NET là gì?
Nhóm đối tượng là một thùng chứa có các đối tượng sẵn sàng để sử dụng. Nó theo dõi đối tượng hiện đang được sử dụng, tổng số đối tượng trong nhóm. Điều này làm giảm chi phí tạo và tạo lại các đối tượng.
30) Liệt kê các loại ngoại lệ thường được sử dụng trong .net
ArgumentException, ArgumentNullException, ArgumentOutOfRangeException, ArithmeticException, DivideByZeroException, OverflowException, IndexOutOfRangeException, InvalidCastException, Không hợp lệOperationException, IOEndOfStreamException, NullReferenceException, OutOfMemoryException, StackOverflowException, v.v.
31) Ngoại lệ tùy chỉnh là gì?
Đôi khi có một số lỗi cần xử lý theo yêu cầu của người dùng. Các ngoại lệ tùy chỉnh được sử dụng cho chúng và được sử dụng các ngoại lệ được xác định.
32) Đại biểu là gì?
Các đại biểu giống nhau là các con trỏ hàm trong C++, nhưng điểm khác biệt duy nhất là chúng an toàn về kiểu, không giống như con trỏ hàm. Các đại biểu là bắt buộc vì chúng có thể được sử dụng để viết các hàm an toàn kiểu chung hơn nhiều.
33) Làm cách nào để kế thừa một lớp này sang lớp khác trong C#?
Dấu hai chấm được sử dụng làm toán tử kế thừa trong C#. Chỉ cần đặt dấu hai chấm và sau đó là tên lớp.
public class DerivedClass : BaseClass
34) Lớp cơ sở trong .net mà tất cả các lớp bắt nguồn từ đó là gì?
System.Object
35) Sự khác biệt giữa ghi đè phương thức và nạp chồng phương thức là gì?
Trong ghi đè phương thức, chúng ta thay đổi định nghĩa phương thức trong lớp dẫn xuất làm thay đổi hành vi của phương thức. Nạp chồng phương thức là tạo một phương thức có cùng tên trong cùng một lớp có các chữ ký khác nhau.
36) Các cách khác nhau mà một phương thức có thể được nạp chồng là gì?
Các phương thức có thể được nạp chồng bằng cách sử dụng các kiểu dữ liệu khác nhau cho một tham số, thứ tự tham số khác nhau và số lượng tham số khác nhau.
37) Tại sao bạn không thể chỉ định công cụ sửa đổi khả năng truy cập cho các phương thức bên trong giao diện?
Trong một giao diện, chúng ta có các phương thức ảo không có định nghĩa phương thức. Tất cả các phương thức đều được ghi đè trong lớp dẫn xuất. Đó là lý do tại sao tất cả chúng đều được công khai.
38) Làm cách nào chúng ta có thể thiết lập lớp được kế thừa nhưng ngăn chặn phương thức bị ghi đè?
Khai báo lớp là công khai và niêm phong phương thức để tránh bị ghi đè.
39) Điều gì xảy ra nếu các giao diện kế thừa có tên phương thức xung đột?
Việc triển khai tùy thuộc vào bạn vì phương thức nằm trong lớp của riêng bạn. Có thể có vấn đề khi các phương thức từ các giao diện khác nhau mong đợi dữ liệu khác nhau, nhưng về mặt trình biên dịch thì bạn ổn.
40) Sự khác biệt giữa Cấu trúc và Lớp là gì?
Cấu trúc là các biến kiểu giá trị và các lớp là kiểu tham chiếu. Các cấu trúc được lưu trữ trên Ngăn xếp gây ra thêm chi phí nhưng truy xuất nhanh hơn. Cấu trúc không thể được kế thừa.
41) Làm thế nào để sử dụng các kiểu nullable trong .Net?
Các loại giá trị có thể lấy giá trị bình thường hoặc giá trị null. Những loại như vậy được gọi là loại nullable.
Int? someID = null; If(someID.HasVAlue) { }
42) Làm thế nào chúng ta có thể tạo một mảng với các giá trị không mặc định?
Chúng ta có thể tạo một mảng với các giá trị không mặc định bằng cách sử dụng Enumerable.Repeat.
43) Sự khác biệt giữa toán tử “is” và “as” trong C# là gì?
Toán tử “is” được sử dụng để kiểm tra tính tương thích của một đối tượng với một kiểu nhất định và nó trả về kết quả dưới dạng Boolean.
Toán tử “as” được sử dụng để chuyển một đối tượng sang một kiểu hoặc một lớp.
44) Đại biểu multicast là gì?
Một đại biểu có nhiều trình xử lý được gán cho nó được gọi là đại biểu multicast. Mỗi trình xử lý được gán cho một phương thức.
45) Bộ chỉ mục trong C# .NET là gì?
Người lập chỉ mục được coi là thông minh mảng trong C#. Nó cho phép các thể hiện của một lớp được lập chỉ mục giống như một mảng.
Ví dụ:
public int this[int index] // Indexer declaration
46) Sự khác biệt giữa “throw” và “throw ex” trong .NET là gì?
Câu lệnh "Ném" giữ nguyên ngăn xếp lỗi ban đầu trong khi "ném cũ" có dấu vết ngăn xếp từ điểm ném của chúng. Người ta luôn khuyên nên sử dụng "ném" vì nó cung cấp thông tin lỗi chính xác hơn.
47) Thuộc tính C# là gì và ý nghĩa của nó?
C# cung cấp cho các nhà phát triển một cách để xác định các thẻ khai báo trên các thực thể nhất định, ví dụ: Lớp, phương thức, v.v. được gọi là thuộc tính. Thông tin của thuộc tính có thể được truy xuất trong thời gian chạy bằng Reflection.
48) Làm cách nào để triển khai mẫu thiết kế đơn trong C#?
Trong mẫu đơn, một lớp chỉ có thể có một phiên bản và cung cấp một điểm truy cập vào nó trên toàn cầu.
Ví dụ:
Public sealed class Singleton { Private static readonly Singleton _instance = new Singleton(); }
49) Sự khác biệt giữa directcast và ctype là gì?
DirectCast được sử dụng để chuyển đổi loại đối tượng yêu cầu loại thời gian chạy giống với loại đã chỉ định trong DirectCast.
Ctype được sử dụng để chuyển đổi trong đó chuyển đổi được xác định giữa biểu thức và loại.
50) Mã C# là mã được quản lý hay không được quản lý?
C# là mã được quản lý vì thời gian chạy ngôn ngữ chung có thể biên dịch mã C# sang ngôn ngữ Trung cấp.
51) Ứng dụng Console là gì?
Ứng dụng bảng điều khiển là một ứng dụng có thể chạy trong dấu nhắc lệnh trong Windows. Bất cứ gì người mới bắt đầu trên .Net, lý tưởng nhất là xây dựng một ứng dụng bảng điều khiển là bước đầu tiên để bắt đầu.
52) Cho ví dụ về việc loại bỏ một phần tử khỏi hàng đợi
Phương thức dequeue được sử dụng để loại bỏ một phần tử khỏi hàng đợi.
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(); } } }
Những câu hỏi phỏng vấn này cũng sẽ giúp ích cho bài thi viva(orals) của bạn