Khởi tạo đối tượng
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 8 trên 70.
Bộ khởi tạo đối tượng giúp bạn dễ dàng đặt giá trị thuộc tính khi tạo đối tượng mà không cần gọi hàm khởi tạo với nhiều tham số.
Cách truyền thống dùng hàm khởi tạo
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
Person person = new Person();
person.Name = "Alice";
person.Age = 25;
person.City = "New York";Sử dụng cú pháp khởi tạo đối tượng
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};Khởi tạo đối tượng cùng hàm khởi tạo
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public Person(string name)
{
Name = name;
}
}
// Hàm khởi tạo (constructor) gán Name, bộ khởi tạo gán các thuộc tính (property) khác
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};Khởi tạo đối tượng lồng nhau
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};Tạo nhiều đối tượng bằng hàm khởi tạo
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };
Person person3 = new Person { Name = "Charlie", Age = 35 };Bộ khởi tạo đối tượng (object initializer) giúp code gọn gàng và dễ đọc hơn. Bạn thiết lập các thuộc tính sau khi hàm khởi tạo chạy. Bạn có thể dùng bộ khởi tạo có hoặc không có tham số hàm khởi tạo, giúp việc tạo đối tượng linh hoạt và ngắn gọn.
Thử thách
Trung bìnhTạo ba đối tượng Student bằng các cách khởi tạo đối tượng khác nhau:
- student1: Dùng hàm khởi tạo mặc định cùng trình khởi tạo đối tượng để đặt tất cả thuộc tính (Name, StudentId, Major, GPA) từ đầu vào
- student2: Dùng trình khởi tạo đối tượng để chỉ đặt Name = "Bob" và Major = "Engineering"
- student3: Dùng hàm khởi tạo với "Charlie" làm tham số, sau đó dùng trình khởi tạo đối tượng để đặt StudentId = 54321, Major = "Mathematics", GPA = 3.5
Tự làm thử
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
int studentId = int.Parse(Console.ReadLine());
string major = Console.ReadLine();
double gpa = double.Parse(Console.ReadLine());
// TODO: Tạo student1 bằng cú pháp khởi tạo đối tượng, gán tất cả thuộc tính
// Dùng hàm khởi tạo mặc định và gán Name, StudentId, Major và GPA
// TODO: Tạo student2 bằng cú pháp khởi tạo đối tượng, chỉ gán Name và Major
// Đặt Name là "Bob" và Major là "Engineering"
// TODO: Tạo student3 bằng hàm khởi tạo với tham số tên là "Charlie"
// Sau đó dùng cú pháp khởi tạo đối tượng để gán StudentId = 54321, Major = "Mathematics", GPA = 3.5
Console.WriteLine($"Student 1: {student1.Name} (ID: {student1.StudentId}) - {student1.Major}, GPA: {student1.GPA}");
Console.WriteLine($"Student 2: {student2.Name} (ID: {student2.StudentId}) - {student2.Major}, GPA: {student2.GPA}");
Console.WriteLine($"Student 3: {student3.Name} (ID: {student3.StudentId}) - {student3.Major}, GPA: {student3.GPA}");
}
}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