'Constructor Chaining' là một cách tiếp cận nhờ đó một hàm tạo gọi một hàm tạo khác trong cùng một cla ss Điều này đặc biệt hữu ích khi chúng ta có một lớp định nghĩa nhiều hàm tạo. Ví dụ, chúng ta đang tạo một lớp có tên là Person trong ví dụ dưới đây. Chúng tôi cũng có ba lĩnh vực mà chúng tôi có thể sử dụng; Tuổi, Tên và Màu tóc. Lớp này có ba hàm tạo. Nếu chúng ta không sử dụng cách tiếp cận 'Constructor Chaining', mã sẽ là một cái gì đó như dưới đây:
Không Sử dụng Constructor Chaining:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge)
{
Age = theAge;
}
public Person(int theAge, string theName)
{
Age = theAge;
Name = theName;
}
public Person(int theAge, string theName, string theHairColour)
{
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
Như bạn có thể thấy, trong mỗi nhà xây dựng chúng ta đang gán một giá trị thành Độ tuổi, trùng lặp mã. Chúng tôi cũng đã gán một giá trị cho Tên trong hai trong số các hàm tạo, vì vậy một lần nữa sao chép nhiều hơn. Để loại bỏ vấn đề này, chúng ta có thể gán tất cả các giá trị cho Age, Name và HairColour trong hàm tạo với hầu hết các tham số. Sau đó chúng ta có thể gọi hàm tạo đó khi hai hàm tạo khác được gọi. Xem mã bên dưới để xem cách tiếp cận ‘Chaining’ này.
Sử dụng Constructor Chaining:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge):this(theAge, "", "")
{
//One parameter
}
public Person(int theAge, string theName):this(theAge, theName, "")
{
//Two Parameters
}
public Person(int theAge, string theName, string theHairColour)
{
//Three parameters
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
Hy vọng rằng sẽ giúp - nó tiết kiệm về sự trùng lặp.
Một nữa 'cực đoan' dụ với rất nhiều lĩnh vực (và do đó rất nhiều sự trùng lặp tiềm năng) được hiển thị ở đây:
An example where it will definitely save on duplication
Bất kỳ ý kiến về lý do tại sao là nó chỉ có sẵn cho nhà xây dựng? Tại sao tôi không thể sử dụng cùng một kỹ thuật với các phương thức quá tải khác? –