Đối với chaining constructor đơn giản, bạn có thể sử dụng các từ khóa đặc biệt this
hoặc base
để chỉ đơn vị thi công khác hiện tại hoặc parent class của. Bạn được phép sử dụng bất kỳ tham số nào cho hàm tạo thi hành làm tham số cho hàm tạo chuỗi và bạn có thể kết hợp chúng bằng cách sử dụng bất kỳ biểu thức hợp pháp nào. Điều này về cơ bản là các quy tắc tương tự áp dụng cho bất kỳ biểu thức nội tuyến nào khác được cung cấp cho một cuộc gọi hàm, ngoại trừ việc bạn nên tránh sử dụng bất kỳ thành viên nào của lớp (vì nó chưa được xây dựng) và giới hạn các tham số và tham số pass:
public foo (Uri someUrl)
{
this.url = someUrl;
}
public foo (string path, string query)
: this(new Uri(String.Concat(path, query)))
{
// this.url is now set and available.
}
Điều này sẽ hoạt động miễn là việc xử lý bạn cần làm có thể được thực hiện trong một biểu thức có giá trị duy nhất. Ví dụ: nếu bạn cần, để làm điều gì đó khác với Uri
trước khi được gửi tới nhà xây dựng khác hoặc nếu bạn cần một số logic phức tạp nếu bạn không thể loại bỏ kỹ thuật này. Cách khác là để cấu trúc lại mã của bạn vào một phương pháp khởi tạo:
public foo (Uri someUrl)
{
this.init(someUrl);
}
public foo (string path, string query)
{
var url = String.Concat(path, query);
url = url.Replace("http://", "https://");
this.init(url);
}
private void init (Uri someUrl)
{
this.url = someUrl;
}
Nguồn
2013-06-24 03:38:59
Bỏ phiếu để mở lại. Câu trả lời trong bài đăng trùng lặp là chính xác nhưng được định hướng nhiều hơn để tham số "đơn giản" đi tới hàm tạo tiếp theo. Bài viết của OP cho thấy rằng có một số xử lý được thực hiện cho URI trước khi chuyển nó đi. Một câu trả lời phù hợp hơn sẽ là có một phương thức chung mà cả hai nhà xây dựng gọi và truyền tham số bằng tham chiếu. – keyboardP
@keyboardP, đồng ý với bạn. Tôi đã sửa đổi tiêu đề để phản ánh chính xác hơn và đã bỏ phiếu để mở lại. (cũng tìm kiếm bản sao của sắc thái này, và xuất hiện trống) –
Cảm ơn bạn đã mở cửa trở lại. –