Lớp tĩnh
Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 13 trên 70.
Khi một lớp chỉ chứa các thành viên static và bạn không bao giờ cần tạo thực thể từ lớp đó, bạn có thể khai báo toàn bộ lớp là static. Điều này cho trình biên dịch biết rằng không thể tạo thực thể từ lớp và lớp đó chỉ có thể chứa các thành viên static.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}Bạn dùng lớp tĩnh giống như thành viên tĩnh, bằng cách gọi trực tiếp chúng qua tên lớp:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;Các lớp tĩnh có những hạn chế quan trọng. Bạn không thể tạo một đối tượng của lớp bằng new, chúng không thể có hàm khởi tạo của đối tượng và không thể được kế thừa. Chúng chỉ có thể chứa các trường, thuộc tính và phương thức tĩnh.
Các lớp Console và Math mà bạn đã dùng là những ví dụ điển hình về lớp tĩnh. Chúng cung cấp các tiện ích mà không cần trạng thái của đối tượng. Lớp tĩnh phù hợp để nhóm các phương thức hỗ trợ hoặc hằng số có liên quan, không cần dữ liệu riêng cho từng đối tượng.
Thử thách
DễHãy tạo một tiện ích chuyển đổi nhiệt độ bằng cách dùng lớp static để nhóm các phương thức hỗ trợ có liên quan, không cần trạng thái của đối tượng.
Bạn sẽ tạo hai tệp để sắp xếp code:
TemperatureConverter.cs: Định nghĩa lớp static có tênTemperatureConvertertrong namespaceUtilities. Lớp này cần có:- Một trường static
AbsoluteZeroCelsiuscó giá trị-273.15 - Một phương thức static
CelsiusToFahrenheit(double celsius)chuyển đổi độ Celsius sang độ Fahrenheit theo công thức:(celsius * 9 / 5) + 32 - Một phương thức static
FahrenheitToCelsius(double fahrenheit)chuyển đổi độ Fahrenheit sang độ Celsius theo công thức:(fahrenheit - 32) * 5 / 9 - Một phương thức static
IsAboveAbsoluteZero(double celsius)trả vềtruenếu nhiệt độ cao hơn độ không tuyệt đối
- Một trường static
Program.cs: Trong tệp chính, dùng lớp static để thực hiện các phép chuyển đổi. Đọc một giá trị nhiệt độ theo độ Celsius từ đầu vào, sau đó hiển thị kết quả chuyển đổi và xác thực.
Bạn sẽ nhận một đầu vào: giá trị nhiệt độ theo độ Celsius.
In kết quả theo định dạng sau:
{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}CVí dụ, nếu đầu vào là 25, đầu ra sẽ là:
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15CHãy nhớ rằng bạn không thể khởi tạo lớp static. Bạn sẽ gọi trực tiếp tất cả phương thức bằng tên lớp, như TemperatureConverter.CelsiusToFahrenheit(25).
Tự làm thử
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// Đọc nhiệt độ theo độ C
double celsius = Convert.ToDouble(Console.ReadLine());
// TODO: Dùng các phương thức (method) tĩnh của TemperatureConverter để:
// 1. Chuyển celsius sang fahrenheit
// 2. Chuyển fahrenheit về celsius
// 3. Kiểm tra nhiệt độ có cao hơn độ không tuyệt đối không
// 4. Lấy hằng số (constant) độ không tuyệt đối
// TODO: In kết quả theo định dạng yêu cầu:
// {celsius}C = {fahrenheit}F
// {fahrenheit}F = {convertedBack}C
// Above Absolute Zero: {True/False}
// Absolute Zero: {AbsoluteZeroCelsius}C
}
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Các khái niệm cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiKhông gian tên và chỉ thịGiới thiệu về lớp và đối tượngTừ khóa thisPhương thức và tham sốTrường và thuộc tínhHàm khởi tạoKhởi tạo đối tượngÔn tập: Máy tính đơn giản4Kế thừa
Cú pháp kế thừa cơ bản (:)Từ khóa 'base'Từ khóa virtual và overrideLớp sealedLớp cơ sở 'object'Ôn tập: hệ phân cấp nhân viên7Tính năng nâng cao
Nạp chồng toán tửBộ lập chỉ mục (this[])Ghi đè ToString()Phương thức mở rộngÔn tập: Danh sách tùy chỉnh10Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếSingleton an toàn với luồngMẫu FactoryMẫu Observer (sự kiện)Mẫu Strategy2Thuộc tính và thành viên tĩnh
Thuộc tính tự độngThuộc tính chỉ đọc hoặc chỉ ghiTrường và phương thức tĩnhLớp tĩnhThành viên có thân biểu thức5Đa hình và interface
Đa hình lúc biên dịch và lúc chạyInterface và lớp trừu tượngNhiều interfaceInterface tường minhUpcasting và downcastingÔn tập: bộ tính toán hình học8Các khái niệm OOP nâng cao
Ưu tiên composition hơn kế thừaGenerics (lớp và phương thức)Delegate và sự kiệnAttribute và reflectionGiao diện IDisposable và câu lệnh usingKiến thức cơ bản về dependency injection11Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổ hợpTự luyện tập: Trình biên dịch C# online