2012-06-18 4 views
6

Tôi đang gặp một vấn đề mà các nhà xây dựng cơ sở cho một lớp dẫn xuất là không nhận được thực hiện. Tôi đã làm điều này một trăm lần và tôi không thể tìm ra cho cuộc sống của tôi tại sao các nhà xây dựng cơ sở không thực hiện. Tôi hy vọng rằng ai đó có thể tìm thấy một cái gì đó đơn giản mà tôi đang mất tích. Một ví dụ về mã dưới đây. Có ai có bất kỳ ý tưởng tại sao constructor cơ bản của tôi không nhận được gọi là đầu tiên? Tôi có các lớp khác được triển khai theo cùng một kiểu và hàm tạo cơ bản luôn được gọi đầu tiên.Constructor cơ sở là không nhận được gọi là

if (item.GetType() == typeof(OtherChargeItem)) 
{ 
    OtherChargeItemAddUpdateTest test = new OtherChargeItemAddUpdateTest((OtherChargeItem)item); 
    test.StartPosition = FormStartPosition.CenterParent; 
    test.ShowDialog(); 
} 

public OtherChargeItemAddUpdateTest() 
{ 
    InitializeComponent(); 
} 

public OtherChargeItemAddUpdateTest(OtherChargeItem item) 
     : base() 
{ 
    currentItem = item; 
} 
+3

Bạn có thể hiển thị phân cấp thừa kế ở đây không? – JaredPar

Trả lời

22

Dường như bạn muốn gọi constructor mặc định trong cùng một lớp, không phải là lớp cơ sở, vì vậy InitializeComponent được gọi khi các nhà xây dựng thứ hai được gọi. Hãy thử this() thay vì base().

+3

+1 Có, kỹ năng khấu trừ tốt. Anh ta có thể nghĩ rằng constructor mặc định được gọi là "constructor cơ sở". –

+4

Cảm ơn, tôi đã chuẩn bị sẵn sàng để thể hiện cảm giác ngớ ngẩn của mình ngay bây giờ. Ngay sau khi JaredPar yêu cầu hệ thống phân cấp thừa kế, tôi đã nhận ra lỗ hổng trong mô tả của tôi về vấn đề và những gì tôi đã cố gắng làm trong 30 phút qua. Cảm ơn sự giúp đỡ và xin lỗi vì đã lãng phí thời gian của mọi người với một câu hỏi tầm thường như vậy không quá tầm thường đối với bộ não của tôi sáng nay vì một lý do nào đó. – Grasshopper

+0

Giao thức trên cái gì đó như thế này? Tôi có nên sửa đổi câu hỏi để phản ánh tốt hơn câu hỏi của tôi nên là gì không? – Grasshopper