2012-08-22 18 views
5

Vui lòng xem câu hỏi được nhúng trong nhận xét bên dưới.Khi chuỗi một hàm tạo cơ sở, làm cách nào tôi có thể sử dụng lại mã khởi tạo trong quá tải

public class CustomException : Exception 
{ 
    private readonly string _customField; 

    public CustomException(string customField, string message) 
     : base(message) 
    { 
     // What's the best way to reuse the customField initialization code in the 
     // overloaded constructor? Something like this(customField) 
    } 

    public CustomException(string customField) 
    { 
     _customField = customField; 
    } 
} 

Tôi đang mở để xem xét các triển khai thay thế sử dụng lại hàm tạo cơ sở và giảm thiểu mã khởi tạo. Tôi muốn giữ _customField chỉ đọc, điều này là không thể nếu tôi trích xuất một phương thức khởi tạo riêng biệt.

Trả lời

3

Đưa nó vào một phương pháp riêng biệt và gọi phương thức đó từ cả hai nhà xây dựng.

public class CustomException : Exception 
{ 
    private readonly string _customField; 

    public CustomException(string customField, string message) 
     : base(message) 
    { 
     Init(out _customField, customField); 
    } 

    public CustomException(string customField) 
     : base() 
    { 
     Init(out _customField, customField); 
    } 

    private Init(out string _customField, string customField) 
    { 
     _customField = customField; 
    } 
} 
+0

Lỗi biên dịch: Một trường chỉ đọc không thể được gán cho (ngoại trừ trong một hàm tạo hoặc một bộ khởi tạo biến). Như đã đề cập trong câu hỏi của tôi, tôi muốn giữ cho trường chỉ đọc. –

+0

@ ZaidMasud Không, không có lỗi biên dịch. Trong 'Init',' _customField' là tham số 'out' tham chiếu đến trường, nhưng không phải là trường. – hvd

+0

Ahh ... xem chỉnh sửa ngay bây giờ. Cú pháp thú vị để xem tham số là cả một tham số và cũng không phải là một tham số. Cần phải kiểm tra điều này. –

7
public CustomException(string customField) : this(customField,"") 
{ 
} 
+2

Cảm ơn, nhưng điều này giả định rằng lớp cơ sở sử dụng chuỗi trống làm mặc định. Điều này có thể đủ gần cho lớp Ngoại lệ, nhưng không được bảo đảm là đúng. Đối với hàm tạo CustomException (chuỗi customField) công khai, không có lời gọi nào lý tưởng nên được thực hiện cho hàm tạo cơ bản. –

Các vấn đề liên quan