1. Giới thiệu
Trong C# 12, Microsoft đã giới thiệu một tính năng mới gọi là “Primary Constructors” (hay còn gọi là Constructors chính). Tính năng này nhằm mục đích đơn giản hóa cách viết và quản lý các constructor, đặc biệt là cho các lớp nhỏ hoặc các loại dữ liệu (data types) như record. Primary constructors cho phép bạn khai báo và khởi tạo các trường dữ liệu trực tiếp trong phần khai báo của lớp hoặc record.
2. Primary Constructors là gì?
Primary constructors là một cách để định nghĩa các constructor chính trực tiếp tại định nghĩa của lớp hoặc record. Điều này giúp giảm bớt sự lặp lại và làm cho mã nguồn trở nên ngắn gọn, dễ đọc hơn.
Ví dụ, thay vì định nghĩa constructor truyền thống trong lớp, bạn có thể sử dụng primary constructor để khai báo các tham số trực tiếp trong phần định nghĩa của lớp.
3. Cú pháp và cách sử dụng
3.1. Record
Cú pháp của primary constructor trong record rất đơn giản. Bạn chỉ cần khai báo các tham số trực tiếp trong phần định nghĩa của record.
1 |
public record Person(string Name, int Age); |
Trong ví dụ trên, Person
có một primary constructor nhận hai tham số: Name
và Age
. Điều này tự động tạo ra các thuộc tính không thể thay đổi (immutable properties) và các phương thức như ToString
, Equals
, và GetHashCode
.
3.2. Class
Primary constructor trong class có thể được khai báo bằng cách thêm các tham số vào phần định nghĩa của class.
1 2 3 4 5 |
public class Employee(string name, int age) { public string Name { get; } = name; public int Age { get; } = age; } |
Trong ví dụ này, Employee
có một primary constructor nhận hai tham số: name
và age
. Các tham số này sau đó được sử dụng để khởi tạo các thuộc tính Name
và Age
.
3.3. Sử dụng với inheritance
Primary constructors cũng hỗ trợ kế thừa (inheritance).
1 2 3 4 |
public class Manager(string name, int age, string department) : Employee(name, age) { public string Department { get; } = department; } |
3.4. Sử dụng với DI
Giả sử bạn có một dịch vụ (IService
) cần được inject vào một lớp Consumer
. Bạn có thể sử dụng primary constructor để thực hiện điều này.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public interface IService { void DoSomething(); } public class Service : IService { public void DoSomething() { Console.WriteLine("Service is doing something."); } } public class Consumer(IService service) { public IService Service { get; } = service; public void Execute() { Service.DoSomething(); } } |
4. Lợi ích của Primary Constructors
4.1. Giảm bớt sự lặp lại
Primary constructors giúp giảm bớt sự lặp lại trong mã nguồn. Bạn không cần phải định nghĩa lại các thuộc tính và các phương thức khởi tạo riêng lẻ.
4.2. Mã nguồn ngắn gọn và dễ đọc
Với primary constructors, mã nguồn trở nên ngắn gọn và dễ đọc hơn. Điều này đặc biệt hữu ích khi làm việc với các lớp dữ liệu nhỏ và đơn giản.
4.3. Hỗ trợ mạnh mẽ cho các loại dữ liệu
Primary constructors rất hữu ích khi làm việc với các loại dữ liệu như record. Chúng tự động tạo ra các phương thức như Equals
, GetHashCode
, và ToString
, giúp tiết kiệm thời gian và công sức của lập trình viên.
Primary constructors là một tính năng mới và mạnh mẽ trong C# 12, giúp đơn giản hóa và tối ưu hóa cách viết constructor. Chúng mang lại nhiều lợi ích, đặc biệt là trong việc giảm bớt sự lặp lại và làm cho mã nguồn trở nên ngắn gọn, dễ đọc hơn.