Tôi có một vài loại có nguồn gốc từ đơn giản Base
như được hiển thị bên dưới.Quá tải hàm tạo "cơ sở" hoặc hàm tạo "này"?
Tôi không chắc liệu có nên sử dụng hàm tạo của lớp cơ sở hay hàm tạo this
khi quá tải các hàm tạo.
ConcreteA
quá tải nhà xây dựng hoàn toàn bằng base
nhà thầu, trong khi
ConcreteB
quá tải sử dụng this
cho hai định nghĩa chồng đầu tiên.
Điều gì sẽ là cách tốt hơn để quá tải nhà thầu?
public abstract class Base
{
public string Name { get; set; }
public int? Age { get; set; }
protected Base() : this(string.Empty) {}
protected Base(string name) : this(name, null) {}
protected Base(string name, int? age)
{
Name = name;
Age = age;
}
}
public class ConcreteA : Base
{
public ConcreteA(){}
public ConcreteA(string name) : base(name) {}
public ConcreteA(string name, int? age) : base(name, age)
{
}
}
public class ConcreteB : Base
{
public ConcreteB() : this(string.Empty, null){}
public ConcreteB(string name): this(name, null){}
public ConcreteB(string name, int? age) : base(name, age)
{
}
}
[Chỉnh sửa] Dường như những gì Ian Quigley đã đề xuất trong mình answer dường như có ý nghĩa. Nếu tôi có cuộc gọi khởi tạo trình xác thực, ConcreteA(string)
sẽ không bao giờ khởi chạy trình xác thực trong trường hợp sau.
public class ConcreteA : Base
{
public ConcreteA(){}
public ConcreteA(string name) : base(name) {}
public ConcreteA(string name, int? age) : base(name, age)
{
InitializeValidators();
}
private void InitializeValidators() {}
}
Điều này có vẻ hợp lý nếu tôi có các khởi tạo khác đang diễn ra trong các nhà thầu cụ thể. – Sung
Có và "điều này" sẽ luôn gọi "cơ sở" vào cuối ngày. Vì vậy, ngay cả khi "điều này" không có gì, nó sẽ thả xuống "cơ sở" –