Ctrl + K + C: đóng đoạn code
Ctrl + K + U: để mở đoạn code
Hoặc /*------đoạn code-------*/
Dưới đây là danh sách các thuật ngữ cơ bản trong C#, được sử dụng rộng rãi và cần thiết để hiểu khi học lập trình ngôn ngữ này:
Namespace: Không gian tên, dùng để tổ chức code và tránh xung đột tên.
Ví dụ: System, MyApp.Utilities.
Class: Lớp, là đơn vị cơ bản của OOP (Lập trình hướng đối tượng), chứa các thành viên như phương thức, thuộc tính, trường.
Ví dụ: public class Person { }.
Object: Đối tượng, là thể hiện của một lớp.
Property: là một đặc điểm của đối tượng (object), và chỉ những đối tượng thuộc về lớp (class) hoặc struct mới có thể chứa thuộc tính.
Car myCar = new Car();
myCar.Color = "Red"; // Truy cập thuộc tính Color
myCar.Speed = 100; // Truy cập thuộc tính Speed
Interface: Giao diện, định nghĩa một tập hợp phương thức mà lớp cần triển khai.
Ví dụ: public interface IAnimal { void Speak(); }.
Enum: Kiểu liệt kê, tập hợp các hằng số có tên.
Ví dụ: public enum Color { Red, Green, Blue }.
Struct: Cấu trúc, tương tự lớp nhưng là kiểu giá trị (value type).
Ví dụ: public struct Point { public int X; public int Y; }.
Delegate: Đại diện, là một kiểu dữ liệu trỏ đến các phương thức.
Ví dụ: public delegate void PrintMessage(string message);.
Event: Sự kiện, cơ chế cho phép đối tượng phát tín hiệu để các đối tượng khác xử lý.
Ví dụ: public event EventHandler ButtonClicked;
Constructor: (hàm tạo/ hàm dựng) là một loại thành viên đặc biệt trong class C#. Nhiệm vụ của nó là khởi tạo object của class.
Variable: Biến, lưu trữ dữ liệu.
Ví dụ: int age = 30;.
Constant: Hằng số, giá trị không thay đổi sau khi được khai báo.
Ví dụ: const double Pi = 3.14;.
Readonly: Biến chỉ đọc, giá trị được gán khi khởi tạo hoặc trong constructor.
Ví dụ: readonly string Name = "John";.
Static: Thành viên tĩnh, dùng chung giữa các đối tượng của một lớp.
Ví dụ: public static int Counter;.
Value Type: Kiểu giá trị, lưu trữ dữ liệu trực tiếp (int, float, bool, struct).
Reference Type: Kiểu tham chiếu, lưu trữ địa chỉ của dữ liệu (class, string, array).
Nullable: Kiểu dữ liệu có thể chứa giá trị null.
Ví dụ: int? nullableInt = null;.
null có nghĩa là "không có giá trị" hoặc "không tham chiếu đến bất kỳ đối tượng nào trong bộ nhớ".
null thường được sử dụng để khởi tạo hoặc kiểm tra trạng thái của một biến kiểu tham chiếu.
If-else: Câu lệnh điều kiện.
Ví dụ: if (x > 0) { } else { }.
Switch-case: Thay thế nhiều if-else khi kiểm tra nhiều giá trị.
Ví dụ: switch (day) { case 1: ... }.
For loop: Vòng lặp xác định số lần lặp.
Ví dụ: for (int i = 0; i < 10; i++) { }.
While loop: Vòng lặp kiểm tra điều kiện trước khi thực thi.
Ví dụ: while (x < 10) { }.
Do-while loop: Vòng lặp luôn thực thi ít nhất một lần.
Ví dụ: do { } while (x < 10);.
Foreach loop: Lặp qua từng phần tử trong tập hợp.
Ví dụ: foreach (var item in list) { }.
Method: Phương thức, thực thi một hành động.
Ví dụ: public void Print() { }.
Return Type: Kiểu trả về của phương thức (void, int, string).
Parameters: Tham số, dữ liệu đầu vào cho phương thức.
Ví dụ: public void Print(string message) { }.
Overloading: Nạp chồng phương thức, cùng tên nhưng tham số khác nhau.
Extension Method: Phương thức mở rộng cho lớp hiện có.
Ví dụ: public static class MyExtensions { public static int Double(this int value) { return value * 2; } }.
Encapsulation: Tính đóng gói, kiểm soát truy cập dữ liệu qua getter và setter.
Inheritance: Tính kế thừa, một lớp có thể kế thừa từ một lớp khác.
Ví dụ: public class Dog : Animal { }.
Polymorphism: Tính đa hình, một phương thức có thể thực thi khác nhau ở các lớp con.
Abstraction: Tính trừu tượng, tập trung vào những gì cần làm thay vì cách làm.
using: Import các namespace.
Ví dụ: using System;.
new: Tạo đối tượng mới.
Ví dụ: Person p = new Person();.
this: Tham chiếu đến đối tượng hiện tại.
base: Tham chiếu đến lớp cha của một lớp kế thừa.
virtual: Định nghĩa một phương thức có thể được ghi đè.
Ví dụ: public virtual void Speak() { }.
override: Ghi đè phương thức của lớp cha.
Ví dụ: public override void Speak() { }.
abstract: Định nghĩa phương thức/lớp trừu tượng.
sealed: Lớp/phương thức không thể kế thừa.
partial: Phân tách định nghĩa lớp/phương thức thành nhiều file.
async/await: Lập trình bất đồng bộ (asynchronous programming).
LINQ (Language Integrated Query): Cách truy vấn dữ liệu từ mảng, danh sách, cơ sở dữ liệu.
Ví dụ: var result = list.Where(x => x > 5);.
Generics: Cho phép tạo các lớp/phương thức với kiểu dữ liệu tổng quát.
Ví dụ: public class List<T> { }.
Collections: Các cấu trúc dữ liệu như List, Dictionary, Queue, Stack.
Exception Handling: Xử lý lỗi với try-catch-finally.
Ví dụ:
csharp
CopyEdit
try
{
int result = 10 / 0;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Threading: Quản lý luồng (threads) để xử lý đa nhiệm.
CLR (Common Language Runtime): Môi trường chạy của các ứng dụng .NET.
Assembly: File chứa mã thực thi, thường là .exe hoặc .dll.
Garbage Collection (GC): Hệ thống tự động quản lý bộ nhớ, giải phóng các đối tượng không sử dụng.
NuGet: Hệ thống quản lý thư viện/dự án của .NET.
Property: Thuộc tính, dùng để đóng gói dữ liệu.
Ví dụ:
csharp
CopyEdit
public string Name { get; set; }
Indexer: Cho phép truy cập các phần tử trong lớp như mảng.
Tuple: Kiểu dữ liệu gọn để lưu trữ nhiều giá trị.
Ví dụ: (int, string) person = (1, "John");.
Lambda Expression: Biểu thức lambda, cách viết tắt cho các phương thức.
Ví dụ: (x, y) => x + y.
Trong C#, một phương thức có thể có tối đa bao nhiêu tham số phụ thuộc vào giới hạn thực tế của hệ thống, nhưng theo lý thuyết thì bạn có thể khai báo một phương thức với hàng nghìn tham số nếu cần, mặc dù đây không phải là thực tiễn tốt. Tuy nhiên, các hệ thống lập trình như C# sẽ có một giới hạn về số lượng tham số trong một phương thức, nhưng giới hạn này thường rất lớn và không phải vấn đề cần quan tâm trong hầu hết các trường hợp.
Có nhiều cách để định nghĩa tham số trong phương thức, tùy thuộc vào mục đích sử dụng và kiểu dữ liệu của tham số. Dưới đây là các kiểu tham số phổ biến:
1. Tham số giá trị (By Value):
Đây là kiểu tham số mặc định trong C#. Khi bạn truyền tham số theo giá trị, phương thức nhận một bản sao của giá trị đó. Bất kỳ thay đổi nào trong phương thức sẽ không ảnh hưởng đến giá trị gốc.
Ví dụ:
csharp
CopyEdit
public void MyMethod(int x)
{
x = 10; // Thay đổi x trong phương thức chỉ ảnh hưởng đến bản sao.
}
2. Tham số tham chiếu (By Reference):
Khi tham số được truyền theo tham chiếu, phương thức sẽ thao tác trực tiếp với biến gốc, thay đổi của tham số trong phương thức sẽ ảnh hưởng đến giá trị ngoài phương thức.
Cách truyền tham số theo tham chiếu:
ref: Để chỉ rõ rằng tham số sẽ được truyền theo tham chiếu, và giá trị của tham số phải được khởi tạo trước khi gọi phương thức.
out: Tương tự ref, nhưng tham số không cần phải khởi tạo trước khi gọi phương thức, và phương thức phải gán giá trị cho tham số trước khi kết thúc.
Ví dụ:
csharp
CopyEdit
public void MyMethod(ref int x)
{
x = 10; // Thay đổi x sẽ ảnh hưởng trực tiếp đến biến gốc.
}
public void MyMethodOut(out int x)
{
x = 5; // Giá trị của x phải được gán trong phương thức.
}
3. Tham số tùy chọn (Optional Parameters):
Bạn có thể chỉ định giá trị mặc định cho tham số, giúp người gọi phương thức không cần phải truyền tham số nếu giá trị mặc định là đủ.
Ví dụ:
csharp
CopyEdit
public void MyMethod(int x, int y = 5)
{
// Nếu không truyền tham số y, nó sẽ mặc định là 5.
}
4. Tham số với mảng (ParamArray):
params cho phép bạn truyền một mảng tham số có số lượng bất kỳ. Tham số này phải là tham số cuối cùng trong phương thức.
Ví dụ:
csharp
CopyEdit
public void MyMethod(params int[] numbers)
{
foreach (var number in numbers)
{
Console.WriteLine(number);
}
}
Bạn có thể gọi phương thức này với số lượng tham số bất kỳ:
csharp
CopyEdit
MyMethod(1, 2, 3, 4); // Sử dụng param array để truyền danh sách tham số
5. Tham số với kiểu dữ liệu khác nhau:
Bạn có thể định nghĩa tham số với bất kỳ kiểu dữ liệu nào, bao gồm kiểu cơ bản như int, string, bool, hoặc các kiểu dữ liệu phức tạp như object, class, interface, delegate, array, v.v.
Ví dụ:
csharp
CopyEdit
public void MyMethod(string name, bool isActive)
{
// Tham số có kiểu string và bool
}
6. Tham số kiểu ref và out với mảng hoặc kiểu phức tạp:
Các tham số như ref và out có thể là mảng hoặc các kiểu dữ liệu phức tạp, và chúng có thể được thay đổi trong phương thức.
Ví dụ:
csharp
CopyEdit
public void MyMethod(ref int[] numbers)
{
numbers[0] = 100; // Sửa đổi mảng được truyền qua tham chiếu
}
7. Tham số kiểu Delegate hoặc Event:
Delegate hoặc event cũng có thể được sử dụng như tham số trong phương thức. Điều này rất hữu ích khi bạn cần truyền một phương thức làm tham số vào một phương thức khác.
Ví dụ:
csharp
CopyEdit
public void MyMethod(Action callback)
{
// Thực hiện callback (phương thức đã được chỉ định)
callback();
}
Tóm lại:
Một phương thức trong C# có thể nhận rất nhiều tham số, không có một giới hạn cụ thể cho số lượng tham số trong lý thuyết. Tuy nhiên, thực tế thường không sử dụng quá nhiều tham số, vì việc này có thể làm mã nguồn trở nên khó duy trì.
Các kiểu tham số phổ biến trong C# bao gồm tham số giá trị, tham số tham chiếu, tham số tùy chọn, tham số mảng (params), và tham số với kiểu dữ liệu khác nhau (như delegate, event).