Hàm khởi tạo
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 7 trên 70.
Hàm khởi tạo (constructor) là một phương thức (method) đặc biệt chạy khi bạn tạo một đối tượng (object). Hàm này khởi tạo các thuộc tính (properties) và trường (fields) của đối tượng.
Hàm khởi tạo mặc định không có tham số
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
// Hàm khởi tạo mặc định
public Book()
{
Title = "Unknown";
Author = "Unknown";
}
}Hàm khởi tạo có tham số
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
// Hàm khởi tạo có tham số
public Book(string title, string author)
{
Title = title;
Author = author;
}
}Nạp chồng hàm khởi tạo, nhiều hàm khởi tạo
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public int Pages { get; set; }
// Hàm khởi tạo có hai tham số
public Book(string title, string author)
{
Title = title;
Author = author;
Pages = 0;
}
// Hàm khởi tạo có ba tham số
public Book(string title, string author, int pages)
{
Title = title;
Author = author;
Pages = pages;
}
}Chuỗi gọi hàm khởi tạo bằng this
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public int Pages { get; set; }
// Hàm khởi tạo chính
public Book(string title, string author, int pages)
{
Title = title;
Author = author;
Pages = pages;
}
// Gọi hàm khởi tạo chính với số trang mặc định
public Book(string title, string author) : this(title, author, 0)
{
}
}Tạo đối tượng bằng các hàm khởi tạo khác nhau
Book book1 = new Book("1984", "George Orwell");
Book book2 = new Book("Harry Potter", "J.K. Rowling", 500);Hàm khởi tạo có tên giống với lớp và không có kiểu trả về. Hàm khởi tạo tự động chạy khi bạn dùng từ khóa new. Bạn có thể có nhiều hàm khởi tạo với các tham số khác nhau (nạp chồng).
Thử thách
Trung bìnhTạo ba hàm khởi tạo cho lớp Product bằng cách nạp chồng và nối chuỗi hàm khởi tạo:
- Hàm khởi tạo có 3 tham số: name, price và stock
- Hàm khởi tạo có 2 tham số: name và price (stock mặc định là 0)
- Hàm khởi tạo mặc định không có tham số (name = "Unknown", price = 0, stock = 0)
Dùng this để nối chuỗi hàm khởi tạo và tránh lặp code.
Tự làm thử
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
decimal price = decimal.Parse(Console.ReadLine());
int stock = int.Parse(Console.ReadLine());
Product product1 = new Product(name, price, stock);
Product product2 = new Product();
Product product3 = new Product("Keyboard", 79.99m);
Console.WriteLine($"Product 1: {product1.Name} - ${product1.Price} (Stock: {product1.Stock})");
Console.WriteLine($"Product 2: {product2.Name} - ${product2.Price} (Stock: {product2.Stock})");
Console.WriteLine($"Product 3: {product3.Name} - ${product3.Price} (Stock: {product3.Stock})");
}
}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