Trắc nghiệm Lập trình .NET - Đề 01 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Thành phần nào của .NET Framework/.NET Core chịu trách nhiệm biên dịch mã nguồn (code) từ ngôn ngữ bậc cao (như C#) thành ngôn ngữ trung gian (IL - Intermediate Language) và sau đó thành mã máy (machine code) tại thời điểm thực thi?
- A. Common Language Specification (CLS)
- B. Base Class Library (BCL)
- C. Just-In-Time Compiler (JIT)
- D. Garbage Collector (GC)
Câu 2: Trong C#, đâu là điểm khác biệt chính giữa kiểu dữ liệu giá trị (Value Type) và kiểu dữ liệu tham chiếu (Reference Type)?
- A. Kiểu giá trị lưu trữ dữ liệu trực tiếp, kiểu tham chiếu lưu trữ địa chỉ bộ nhớ.
- B. Kiểu giá trị chỉ có thể là các kiểu nguyên thủy, kiểu tham chiếu là các lớp do người dùng định nghĩa.
- C. Kiểu giá trị được cấp phát trên heap, kiểu tham chiếu được cấp phát trên stack.
- D. Kiểu giá trị có thể là null, kiểu tham chiếu thì không.
Câu 3: Xét đoạn mã C# sau:
```csharp
class MyClass
{
public int Value;
}
void ModifyValue(MyClass obj)
{
obj.Value = 100;
}
MyClass myObject = new MyClass { Value = 50 };
ModifyValue(myObject);
// Giá trị của myObject.Value sau khi gọi hàm ModifyValue là bao nhiêu?
```
- A. 50 (Không thay đổi)
- B. 0 (Giá trị mặc định)
- C. Không xác định do lỗi biên dịch
- D. 100
Câu 4: Trong C#, từ khóa `static` khi áp dụng cho một thành viên (field, method, property) của lớp có ý nghĩa gì?
- A. Thành viên này chỉ có thể truy cập từ bên trong lớp đó.
- B. Thành viên này thuộc về lớp chứ không thuộc về một đối tượng cụ thể của lớp.
- C. Thành viên này không thể bị ghi đè (override) bởi lớp con.
- D. Thành viên này phải được khởi tạo khi đối tượng của lớp được tạo.
Câu 5: Bạn đang thiết kế một hệ thống quản lý hình dạng (Shape). Bạn có các hình cụ thể như `Circle`, `Square`, `Triangle`. Mỗi hình dạng cần có phương thức `CalculateArea()`. Bạn muốn đảm bảo rằng tất cả các lớp hình dạng đều phải triển khai phương thức này, nhưng không muốn cung cấp triển khai mặc định trong lớp cơ sở `Shape`. Bạn nên sử dụng loại lớp cơ sở nào?
- A. Lớp trừu tượng (Abstract Class)
- B. Lớp tĩnh (Static Class)
- C. Lớp niêm phong (Sealed Class)
- D. Lớp bình thường (Concrete Class)
Câu 6: Xét đoạn mã C# sau:
```csharp
int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
// evenNumbers sẽ chứa các giá trị nào?
```
Đoạn mã trên sử dụng tính năng LINQ. Kết quả của `evenNumbers` sẽ là gì?
- A. { 1, 3, 5 }
- B. { } (Danh sách rỗng)
- C. { 2, 4 }
- D. { 1, 2, 3, 4, 5 }
Câu 7: Trong .NET, cơ chế nào chịu trách nhiệm tự động giải phóng bộ nhớ không còn được sử dụng bởi các đối tượng kiểu tham chiếu?
- A. Manual Memory Management
- B. Garbage Collector
- C. Just-In-Time Compiler
- D. Common Type System
Câu 8: Bạn cần lặp qua một tập hợp các đối tượng (ví dụ: `List`) mà không cần quan tâm đến chỉ số của từng phần tử. Vòng lặp nào trong C# là phù hợp và thường được khuyến nghị sử dụng trong trường hợp này?
- A. for
- B. while
- C. do-while
- D. foreach
Câu 9: Trong C#, sự khác biệt cơ bản giữa một `interface` và một `abstract class` là gì?
- A. Interface có thể chứa các trường (fields), còn abstract class thì không.
- B. Một lớp chỉ có thể triển khai một interface, nhưng có thể kế thừa từ nhiều abstract class.
- C. Một lớp có thể triển khai nhiều interface, nhưng chỉ có thể kế thừa từ một abstract class.
- D. Abstract class chỉ chứa các phương thức trừu tượng, còn interface có thể chứa phương thức có triển khai.
Câu 10: Khi xử lý ngoại lệ (exception handling) trong C#, khối `finally` được sử dụng với mục đích gì?
- A. Chỉ được thực thi nếu không có ngoại lệ nào xảy ra trong khối `try`.
- B. Luôn được thực thi, bất kể có ngoại lệ xảy ra hay không.
- C. Chỉ được thực thi nếu một ngoại lệ xảy ra trong khối `try` và được bắt bởi khối `catch` tương ứng.
- D. Chỉ được thực thi nếu một ngoại lệ xảy ra trong khối `try` và không được bắt bởi bất kỳ khối `catch` nào.
Câu 11: Bạn đang viết một ứng dụng cần giao tiếp với cơ sở dữ liệu SQL Server trong môi trường .NET. Thư viện/namespace nào sau đây là cốt lõi để thực hiện các thao tác truy cập dữ liệu bằng ADO.NET?
- A. System.IO
- B. System.Net
- C.
- D. System.Xml
Câu 12: Trong C#, từ khóa nào được sử dụng để một lớp con gọi đến constructor của lớp cha?
- A. base
- B. this
- C. parent
- D. super
Câu 13: Bạn có một danh sách các số nguyên và muốn tạo một danh sách mới chỉ chứa bình phương của các số lẻ. Sử dụng LINQ, truy vấn nào sau đây thực hiện đúng yêu cầu đó?
- A. numbers.Select(n => n * n).Where(n => n % 2 != 0).ToList();
- B. numbers.Where(n => n % 2 != 0).Select(n => n * n).ToList();
- C. numbers.Where(n => n * n % 2 != 0).ToList();
- D. numbers.Select(n => n % 2 != 0 ? n * n : n).ToList();
Câu 14: Xét đoạn mã C# sau:
```csharp
public class Animal
{
public virtual void Speak()
{
Console.WriteLine(
- A. Đa hình (Polymorphism), in ra
- B. Kế thừa (Inheritance), in ra
- C. Đóng gói (Encapsulation), in ra
- D. Trừu tượng (Abstraction), in ra
Câu 15: Trong lập trình .NET, mục đích chính của việc sử dụng `using` statement (ví dụ: `using (SqlConnection conn = new SqlConnection(...)) { ... }`) là gì?
- A. Để nhập các namespace vào phạm vi hiện tại.
- B. Để tạo bí danh cho một kiểu dữ liệu.
- C. Để bắt và xử lý ngoại lệ một cách hiệu quả.
- D. Để đảm bảo tài nguyên không còn cần thiết (triển khai IDisposable) được giải phóng đúng cách.
Câu 16: Kiểu dữ liệu `string` trong C# là kiểu giá trị hay kiểu tham chiếu? Giải thích lý do.
- A. Kiểu giá trị, vì nó được lưu trữ trên stack.
- B. Kiểu tham chiếu, vì nó là một lớp và được lưu trữ trên heap.
- C. Kiểu giá trị, vì nó có tính bất biến (immutable).
- D. Kiểu tham chiếu, vì nó không thể là null.
Câu 17: Trong ASP.NET Core MVC, mô hình MVC (Model-View-Controller) hoạt động như thế nào?
- A. Model xử lý yêu cầu, View chứa logic nghiệp vụ, Controller hiển thị dữ liệu.
- B. View xử lý yêu cầu, Controller chứa logic nghiệp vụ, Model hiển thị dữ liệu.
- C. Controller xử lý yêu cầu, Model chứa logic nghiệp vụ/dữ liệu, View hiển thị dữ liệu.
- D. Model xử lý yêu cầu, Controller hiển thị dữ liệu, View chứa logic nghiệp vụ.
Câu 18: Xét đoạn mã C# sau:
```csharp
int x = 10;
object obj = x; // Boxing
int y = (int)obj; // Unboxing
// Nếu thay dòng cuối thành: int y = (short)obj; Điều gì sẽ xảy ra?
```
- A. Biên dịch lỗi.
- B. Chạy lỗi (runtime error) với InvalidCastException.
- C. Chạy bình thường và `y` sẽ có giá trị 10.
- D. Chạy bình thường nhưng `y` sẽ có giá trị 0.
Câu 19: Đâu là lợi ích chính của việc sử dụng Generic trong C#?
- A. Tăng cường an toàn kiểu (type safety) và hiệu suất.
- B. Cho phép kế thừa từ nhiều lớp cha.
- C. Tự động giải phóng bộ nhớ không còn sử dụng.
- D. Đảm bảo mã nguồn chỉ chạy được trên một nền tảng cụ thể.
Câu 20: Bạn cần định nghĩa một tập hợp các hằng số nguyên có tên gợi nhớ (ví dụ: các trạng thái của một đơn hàng: Pending, Processing, Shipped, Delivered). Cấu trúc nào trong C# là phù hợp nhất cho mục đích này?
- A. Class
- B. Struct
- C. Enum
- D. Interface
Câu 21: Trong C#, từ khóa `const` và `readonly` đều được sử dụng để tạo các trường không thể thay đổi giá trị. Điểm khác biệt chính giữa chúng là gì?
- A. `const` chỉ dùng cho kiểu giá trị, `readonly` dùng cho cả kiểu giá trị và tham chiếu.
- B. `const` có thể thay đổi giá trị sau khi khởi tạo, `readonly` thì không.
- C. `readonly` phải được khởi tạo tại thời điểm khai báo, `const` thì không.
- D. `const` là hằng số biên dịch, `readonly` là hằng số runtime (cho mỗi instance).
Câu 22: Bạn đang phát triển một ứng dụng web ASP.NET Core và cần gửi yêu cầu HTTP đến một API bên ngoài một cách bất đồng bộ để tránh chặn luồng chính. Từ khóa nào trong C# thường được sử dụng để đánh dấu một phương thức là bất đồng bộ và cho phép sử dụng `await` bên trong nó?
- A. async
- B. await
- C. Task
- D. void
Câu 23: Trong C#, khi nào bạn nên sử dụng `struct` thay vì `class`?
- A. Khi cần đối tượng có thể kế thừa từ các lớp khác.
- B. Khi đối tượng cần có thể là null.
- C. Khi kiểu dữ liệu nhỏ, chủ yếu chứa dữ liệu và bạn muốn hiệu suất cao hơn bằng cách tránh cấp phát trên heap.
- D. Khi cần tạo các phương thức ảo (virtual methods).
Câu 24: Xét đoạn mã sau:
```csharp
List numbers = new List { 1, 2, 3 };
List otherNumbers = numbers;
otherNumbers.Add(4);
// Số lượng phần tử trong danh sách "numbers" sau khi thêm là bao nhiêu?
```
Đoạn mã này minh họa điều gì về cách xử lý kiểu dữ liệu?
- A. 3 (Vì `otherNumbers` là bản sao độc lập)
- B. 0 (Lỗi runtime)
- C. Không xác định (Lỗi biên dịch)
- D. 4 (Vì cả hai biến trỏ cùng đối tượng)
Câu 25: Trong lập trình hướng đối tượng với C#, "Encapsulation" (Đóng gói) đề cập đến nguyên tắc nào?
- A. Đóng gói dữ liệu (fields) và các phương thức (methods) vào một đơn vị duy nhất (lớp) và kiểm soát quyền truy cập.
- B. Khả năng một đối tượng thuộc nhiều kiểu khác nhau.
- C. Khả năng một lớp con kế thừa các thuộc tính và phương thức của lớp cha.
- D. Khả năng định nghĩa các phương thức chung mà không cần cung cấp triển khai cụ thể.
Câu 26: Bạn cần tạo một đối tượng mà chỉ có duy nhất một thể hiện (instance) tồn tại trong toàn bộ ứng dụng. Mẫu thiết kế (Design Pattern) nào thường được sử dụng để đạt được điều này?
- A. Factory Pattern
- B. Observer Pattern
- C. Singleton Pattern
- D. Strategy Pattern
Câu 27: Trong C#, từ khóa `yield return` được sử dụng trong các phương thức nào và mục đích của nó là gì?
- A. Trong các phương thức bất đồng bộ (`async`) để tạm dừng thực thi cho đến khi một tác vụ hoàn thành.
- B. Trong các phương thức trả về tập hợp (`IEnumerable`) để trả về từng phần tử một cách lười biếng (lazy).
- C. Để thoát khỏi một vòng lặp ngay lập tức.
- D. Để chỉ định rằng một phương thức sẽ ném ra một ngoại lệ.
Câu 28: Mục đích chính của Common Language Runtime (CLR) trong .NET là gì?
- A. Cung cấp môi trường thực thi cho mã .NET, bao gồm quản lý bộ nhớ và xử lý ngoại lệ.
- B. Chỉ định các quy tắc cho phép các ngôn ngữ .NET tương tác với nhau.
- C. Cung cấp tập hợp các thư viện cơ bản cho các tác vụ lập trình phổ biến.
- D. Biên dịch mã nguồn thành mã máy trước khi thực thi.
Câu 29: Bạn đang đọc dữ liệu từ một file văn bản lớn và muốn xử lý từng dòng mà không đọc toàn bộ file vào bộ nhớ cùng lúc. Lớp nào trong namespace `System.IO` của .NET thường được sử dụng để đọc file theo từng dòng một cách hiệu quả?
- A. FileStream
- B. StreamReader
- C. BinaryReader
- D. MemoryStream
Câu 30: Trong C#, khái niệm "Delegate" tương tự nhất với khái niệm nào trong các ngôn ngữ lập trình khác hoặc các nguyên tắc thiết kế?
- A. Interface
- B. Abstract Class
- C. Function Pointer (Con trỏ hàm)
- D. Enum