C# Flashcards

1
Q

IDE

A

integrated development environment (nơi viết code)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

unity và cocos

A

nền tảng (game engines) để phát triển game

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

để code game có đồ họa nặng như genshin

A

nên dùng c++ hoặc c#

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

int là kiểu dữ liệu gì?

A

Kiểu dữ liệu số nguyên.
int age = 25;
Console.WriteLine(age);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Khai báo mảng trong C# như thế nào?

A

int[] numbers = {1, 2, 3, 4, 5};

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Câu lệnh switch dùng để làm gì?

A

Dùng để kiểm tra giá trị của một biến với nhiều điều kiện khác nhau.
char grade = ‘A’;
switch (grade) {
case ‘A’:
Console.WriteLine(“Excellent!”);
break;
case ‘B’:
Console.WriteLine(“Good job.”);
break;
default:
Console.WriteLine(“Keep trying!”);
break;
}
Kết quả: Excellent!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Cách sử dụng if-else trong C#?

A

if (age >= 18) {
Console.WriteLine(“You are an adult.”);
} else {
Console.WriteLine(“You are underaged.”);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Cú pháp vòng lặp for trong C#?

A

for (int i = 0; i < 5; i++) {
Console.WriteLine(“Hello “ + i);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Vòng lặp nào dùng để duyệt qua từng phần tử của mảng?

A

Vòng lặp foreach.
int[] numbers = {1, 2, 3, 4, 5};
foreach (int number in numbers) {
Console.WriteLine(number);
}
Kết quả:
// 1
// 2
// 3
// 4
// 5

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Cách khai báo một hàm không trả giá trị?

A

void SayHello( ) {
Console.WriteLine(“Hello!”);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hàm có trả giá trị int sẽ khai báo như thế nào?

A

int Add(int a, int b) {
return a + b;
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Lớp trong C# là gì?

A

Lớp là một khuôn mẫu để tạo đối tượng, chứa thuộc tính và phương thức.
class Animal {
public string Name;
public void Speak() {
Console.WriteLine(Name + “ says Hello!”);
}
}

Animal cat = new Animal();
cat.Name = “Kitty”;
cat.Speak(); Kết quả: Kitty says Hello!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Đặc điểm của kế thừa trong OOP?

A

Một lớp con có thể kế thừa thuộc tính và phương thức của lớp cha.
class Animal {
public void Speak() {
Console.WriteLine(“Animal speaks.”);
}
}

class Dog : Animal {
public void Bark() {
Console.WriteLine(“Dog barks.”);
}
}

Dog myDog = new Dog();
myDog.Speak(); Kết quả: Animal speaks.
myDog.Bark(); Kết quả: Dog barks.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Đa hình (Polymorphism) trong C# là gì?

A

Đa hình cho phép phương thức có cùng tên nhưng hành vi khác nhau tuỳ vào đối tượng gọi nó (overloading, overriding).
class Animal {
public virtual void Speak() {
Console.WriteLine(“Animal speaks.”);
}
}

class Dog : Animal {
public override void Speak() {
Console.WriteLine(“Dog barks.”);
}
}

Animal myAnimal = new Dog();
myAnimal.Speak(); Kết quả: Dog barks.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Cách sử dụng base trong kế thừa?

A

base gọi phương thức hoặc thuộc tính của lớp cha.
class Dog : Animal {
public void Speak() {
base.Speak(); // Gọi phương thức của lớp cha
Console.WriteLine(“Woof!”);
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Cách sử dụng get và set trong C#?

A

public int Age {
get { return age; }
set { if (value >= 0) age = value; }
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Kiểu dữ liệu float dùng để lưu trữ giá trị nào?

A

Lưu trữ số thực có dấu, có độ chính xác 7 chữ số thập phân.
float pi = 3.14159f;
Console.WriteLine(pi); Kết quả: 3.14159

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Sự khác biệt giữa var và dynamic?

A

var: Xác định kiểu dữ liệu tại thời điểm biên dịch, không thể thay đổi kiểu sau đó.
dynamic: Xác định kiểu dữ liệu tại thời điểm chạy, có thể thay đổi kiểu.
var x = 10; int
dynamic y = 10; int
y = “Hello”; string (hợp lệ với dynamic)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Giá trị mặc định của kiểu dữ liệu bool là gì?

A

false.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Cách viết câu lệnh if rút gọn (ternary operator)?

A

condition ? trueExpression : falseExpression;
vd:
int age = 20;
string message = age >= 18 ? “Adult” : “Minor”;
Console.WriteLine(message); Kết quả: Adult

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Câu lệnh else if có thể xuất hiện bao nhiêu lần?

A

Không giới hạn.
if (score >= 90) {
Console.WriteLine(“A”);
} else if (score >= 80) {
Console.WriteLine(“B”);
} else {
Console.WriteLine(“C”);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Khi nào dùng vòng lặp do-while thay vì while?

A

Khi cần đảm bảo khối lệnh thực thi ít nhất một lần, ngay cả khi điều kiện sai ngay từ đầu.
int count = 1;
do {
Console.WriteLine(“Hello “ + count);
count++;
} while (count <= 3);
Kết quả:
Hello 1
Hello 2
Hello 3

23
Q

Cú pháp vòng lặp vô hạn trong C#?

A

while (true) {
// code
}

24
Q

Hàm có thể trả về nhiều giá trị không?

A

Không trực tiếp, nhưng có thể sử dụng out hoặc Tuple.
(int, int) GetMinMax(int[] numbers) {
return (numbers.Min(), numbers.Max());
}
var result = GetMinMax(new[] {1, 2, 3, 4, 5});
Console.WriteLine(result.Item1); // Min
Console.WriteLine(result.Item2); // Max

25
Q

Sự khác biệt giữa ref và out?

A

ref: Biến phải được gán giá trị trước khi gọi hàm.
out: Biến không cần gán giá trị trước, nhưng phải gán trong hàm.

26
Q

Tính đóng gói (encapsulation) đảm bảo điều gì?

A

Dữ liệu chỉ có thể truy cập thông qua các phương thức hoặc thuộc tính được cấp quyền.

27
Q

Interface khác gì Abstract Class?

A

Interface chỉ chứa khai báo, không có logic.
Abstract Class có thể chứa cả khai báo lẫn logic.
interface IAnimal {
void Speak();
}

abstract class Animal {
public abstract void Speak();
public void Eat() {
Console.WriteLine(“Eating…”);
}
}

28
Q

sealed trong C# là gì?

A

Từ khóa sealed ngăn không cho lớp hoặc phương thức bị kế thừa.
sealed class Dog {
public void Bark() {
Console.WriteLine(“Woof!”);
}
}
// class Poodle : Dog { } // Lỗi biên dịch

29
Q

override khác gì new trong phương thức?

A

override: Ghi đè phương thức của lớp cha.
new: Ẩn phương thức của lớp cha.

30
Q

Sự khác biệt giữa throw và throw ex?

A

throw: Bảo toàn thông tin stack trace ban đầu.
throw ex: Xóa stack trace ban đầu.
try {
throw new Exception(“Error occurred!”);
} catch (Exception ex) {
throw; // Bảo toàn stack trace
}

31
Q

Cú pháp try-catch-finally trong C#?

A

try {
// code có thể gây lỗi
} catch (Exception ex) {
// xử lý lỗi
} finally {
// khối lệnh luôn được thực thi
}

32
Q

LINQ dùng để làm gì?

A

Truy vấn dữ liệu từ các nguồn khác nhau (mảng, danh sách, cơ sở dữ liệu) bằng cú pháp thống nhất.
int[] numbers = {1, 2, 3, 4, 5};
var evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers) {
Console.WriteLine(num);
}
// Kết quả:
// 2
// 4

33
Q

Từ khóa const khác gì với readonly?

A

const: Giá trị cố định, phải được gán ngay khi khai báo.
readonly: Giá trị có thể được gán tại thời điểm khai báo hoặc trong constructor.

34
Q

Biến có thể sử dụng trước khi khởi tạo giá trị không?

A

Không, biến phải được khởi tạo trước khi sử dụng.

35
Q

Phạm vi của biến toàn cục (static) là gì?

A

Có phạm vi toàn cục, thuộc về lớp thay vì đối tượng cụ thể.

36
Q

Câu lệnh switch trong C# có hỗ trợ so sánh kiểu chuỗi không?

A

Có.
string color = “red”;
switch (color) {
case “red”:
Console.WriteLine(“Red selected”);
break;
case “blue”:
Console.WriteLine(“Blue selected”);
break;
default:
Console.WriteLine(“No color selected”);
break;
}

37
Q

Có thể sử dụng goto trong câu lệnh switch không?

A

Có, nhưng không được khuyến khích.
switch (choice) {
case 1:
Console.WriteLine(“Option 1”);
goto case 2;
case 2:
Console.WriteLine(“Option 2”);
break;
}

38
Q

Lệnh break dùng để làm gì trong vòng lặp?

A

Dùng để thoát khỏi vòng lặp hiện tại.

39
Q

Sự khác biệt giữa continue và break là gì?

A

break: Thoát hẳn khỏi vòng lặp.
continue: Bỏ qua lần lặp hiện tại, chuyển sang lần lặp kế tiếp.

40
Q

Vòng lặp foreach có thể chỉnh sửa giá trị của các phần tử trong danh sách không?

A

Không, chỉ được phép đọc giá trị.

41
Q

Hàm params dùng để làm gì?

A

Cho phép truyền một số lượng tham số không cố định vào hàm.
void PrintNumbers(params int[] numbers) {
foreach (int num in numbers) {
Console.WriteLine(num);
}
}
PrintNumbers(1, 2, 3, 4);

42
Q

Tham số optional trong hàm là gì?

A

Là tham số có giá trị mặc định, có thể không được truyền vào khi gọi hàm.
void Greet(string name = “Guest”) {
Console.WriteLine(“Hello, “ + name);
}
Greet(); Kết quả: Hello, Guest

43
Q

Hàm Main trong C# luôn trả về kiểu dữ liệu gì?

A

Có thể trả về void hoặc int.

44
Q

Từ khóa this dùng để làm gì?

A

Dùng để tham chiếu đến chính đối tượng hiện tại.
class Person {
private string name;
public void SetName(string name) {
this.name = name; // Tham chiếu đến biến của lớp
}
}

45
Q

Constructor có thể bị ghi đè không?

A

Không, nhưng có thể sử dụng nhiều constructor với tham số khác nhau (overloading).

46
Q

Sự khác biệt giữa public, private, protected và internal là gì?

A

public: Truy cập được từ bất kỳ đâu.
private: Chỉ truy cập được bên trong lớp.
protected: Truy cập được trong lớp và lớp kế thừa.
internal: Chỉ truy cập được trong cùng một assembly.

47
Q

Từ khóa base dùng để làm gì?

A

Gọi phương thức hoặc constructor của lớp cha.

48
Q

Tại sao cần dùng tính đa hình (polymorphism)?

A

Để cho phép cùng một phương thức hoạt động khác nhau dựa trên đối tượng cụ thể.

49
Q

Phương thức virtual có cần ghi đè không?

A

Không bắt buộc, nhưng có thể ghi đè khi cần.

50
Q

Có thể sử dụng nhiều khối catch trong cùng một try không?

A

Có, mỗi catch xử lý một loại ngoại lệ cụ thể.

51
Q

Làm sao để viết ngoại lệ tùy chỉnh (custom exception)?

A

Kế thừa lớp Exception.
class MyCustomException : Exception {
public MyCustomException(string message) : base(message) {}
}

52
Q

LINQ có thể sắp xếp dữ liệu theo thứ tự giảm dần không?

A

Có, dùng OrderByDescending.

53
Q

LINQ hỗ trợ các phương thức nào để nhóm dữ liệu?

A

Hỗ trợ GroupBy.
var grouped = students.GroupBy(s => s.Class);