Sự khác nhau giữa biến Constant, ReadOnly và Static trong C#
Các biến Constant và ReadOnly (const và readonly) trong C# làm cho 1 biến mà giá trị không thể bị thay đổi. Từ khóa static thì được sử dụng để tạo ra biến tĩnh chia sẻ giá trị cho tất cả các thể hiện của class đó. Trong bài viết này chúng ta sẽ cùng tìm hiểu về sự khác nhau giữa chúng.
Constant
Trường constant hay biến constant phải được gán giá trị lúc khai báo sau đó thì chúng không thể thay đổi giá trị. Mặc định constant là static nên không thể khai báo thêm từ khóa static cho biến constant.
public const int X = 10;
Một biến constant là một hằng số từ khi biên dịch (complie-time constant). Một biến constant có thể được khởi tạo bởi một biểu thức nhưng phải đảm bảo các toán hạng trong biểu thức cũng phải là constant.
void Calculate(int Z)
{
const int X = 10, X1 = 50;
const int Y = X + X1; //no error, since its evaluated a compile time
const int Y1 = X + Z; //gives error, since its evaluated at run time
}
Bạn có thể áp dụng từ khóa const vào các kiểu nguyên thủy (byte, short, int, long, char, float, double, decimal, bool), enum, một chuỗi, hoặc một kiểu tham chiếu và có thể gán với giá trị null.
const MyClass obj1 = null;//không có lỗi
const MyClass obj2 = new MyClass();//lỗi ở lúc runtime
Biến constant có thể được gán tất cả các access modifiers như public, private, protected, internal. Bạn sử dụng biến constant trong trường hợp chắc chắn giá trị của chúng không thay đổi.
ReadOnly
Một biến Readonly có thể được khởi tạo vào thời điểm khai báo hoặc trong constructor của class đó. Vì vậy các biến readonly có thể được sử dụng như là các hằng số lúc thực thi (run-time constants)
class MyClass
{
readonly int X = 10; // Khởi tạo lúc khai báo
readonly int X1;
public MyClass(int x1)
{
X1 = x1; // khởi tạo lúc chạy
}
}
Readonly có thể được áp dụng cho cả tham giá trị và kiểu tham chiếu trừ delegate và event. Sử dụng readonly khi bạn muốn tạo ra biến constant ở lúc runtime.
Static
Từ khóa static được sử dụng để tạo một biến hoặc một thành phần tĩnh, nghĩa là giá trị của nó sẽ được chia sẻ cho toàn bộ các đối tượng và không gắn vào một đối tượng cụ thể nào. Từ khóa static có thể được áp dụng cho cả class, fields, properties, operators, events, constructor nhưng không dùng được cho index, destructors, hay kiểu nào hơn các classs.
class MyClass
{
static int X = 10;
int Y = 20;
public static void Show()
{
Console.WriteLine(X);
Console.WriteLine(Y); //lỗi bởi vì static method chỉ truy cập được biến static
}
}
Kiến thức về từ khóa static
- Nếu từ khóa static được áp dụng cho 1 class tất cả các thành phần trong class cũng phải static
- Phương thức static chỉ có thể truy cập các thành phần static khác trong class. Các static properties được sử dụng để set và get giá trị cho các giá trị của biến static trong class.
Static constructor không thể có tham số. Không thể áp dụng các access modifiers cho static constructor, luôn có một default constructor public để khởi tạo các biến static cho clas
Trích nguồn từ: http://www.dotnet-tricks.com/
Bài viết liên quan
Sử dụng kiểu tập hợp (Enum)
Enum (viết tắt của Enumeration) trong C# là một kiểu dữ liệu đặc biệt cho phép bạn định nghĩa một tập hợp các hằng số có tên
Đọc thêmTính đóng gói (Encapsulation) và best practices trong OOP
(Tính đóng gói) là một trong những nguyên tắc cơ bản của lập trình hướng đối tượng (OOP).
Đọc thêmTính trừu tượng - Abstract classes and interfaces
Tính trừu tượng (Abstraction) trong OOP là kỹ thuật ẩn đi các chi tiết triển khai và chỉ hiển thị cho người dùng những chức năng cần thiết.
Đọc thêmTính chất kế thừa (Inheritance) và đa hình (polymorphism)
Kế thừa là cơ chế cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác.
Đọc thêmCách debug ứng dụng C#
Hướng dẫn cách debug chương trình C# trong Visual Studio và Visual Studio Code
Đọc thêmTìm hiểu về các loại Collection trong C#
Trong C#, collections là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý các nhóm đối tượng. C# cung cấp nhiều loại collections khác nhau để phù hợp với các yêu cầu cụ thể của lập trình viên
Đọc thêmTổng quan về Generic và Non-Generic Collection
Hiểu khái niệm Generic và Non-Generic Collection và phân biệt giữa Generic Collection và Non-Generic Collection.
Đọc thêmSử dụng mảng (Arrays)
Mảng trong C# là một cấu trúc dữ liệu lưu trữ một dãy các phần tử có bộ nhớ nằm liên tiếp nhau và có kích thước cố đinh.
Đọc thêmLập trình hướng đối tượng
Lập trình hướng đối tượng (Object Oriented Programing) hay còn gọi là OOP. Là một kỹ thuật lập trình cho phép các lập trình viên có thể ánh xạ các thực thể bên ngoài đời thực và trừu tượng hoá thành các class và object trong mã nguồn.
Đọc thêmVòng lặp (loop)
Trong thực tế khi bạn cần thực thi một khối lệnh nhiều lần. Vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một khối lệnh nhiều lần.
Đọc thêm