2012-02-28 37 views
5

Tôi có một tập hợp các lớp nơi cơ sở của tôi có một hàm tạo lấy một đối tượng cấu hình và xử lý việc truyền các giá trị đến các thuộc tính của nó.Gọi ngầm cho các hàm tạo cha mẹ

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A {} 
class C : A {} 
class D : B {} 
class E : B {} 

Có thể ngầm gọi một hàm tạo cơ sở không mặc định từ lớp con hoặc tôi có cần triển khai rõ ràng chữ ký lên chuỗi để thực hiện thông qua nhà thầu không?

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A { public A(ObjType MyObj) : base(MyObj){} } 
class C : A { public A(ObjType MyObj) : base(MyObj){} } 
class D : B { public A(ObjType MyObj) : base(MyObj){} } 
class E : B { public A(ObjType MyObj) : base(MyObj){} } 

Nếu trường hợp đó xảy ra, tốt hơn là chỉ cần thực hiện phương pháp sau khi tạo đối tượng?

Trả lời

4

Ngụ ý? Không, các nhà xây dựng không được kế thừa. Lớp học của bạn có thể rõ ràng là gọi hàm tạo của nó là của cha mẹ. Nhưng nếu bạn muốn lớp của bạn có cùng chữ ký của hàm tạo như lớp cha, bạn phải thực hiện chúng.

Ví dụ:

public class A 
{ 
    public A(int someNumber) 
    { 
    } 
} 

// This will not compile becase A doesn't have a default constructor and B 
// doesn't inherit A's constructors. 
public class B : A 
{ 
} 

Để thực hiện việc này, bạn sẽ phải tuyên bố một cách rõ ràng các nhà thầu bạn muốn B phải có, và họ đã gọi constructor của một cách rõ ràng (trừ khi A có một constructor mặc định tất nhiên) .

public class B : A 
{ 
    public B(int someNumber) : base(someNumber) 
    { 
    } 
} 
+0

Đó là những gì tôi (khiêm tốn) lo sợ. Tôi nghĩ rằng tôi sẽ đi theo con đường phương pháp trợ giúp. Cảm ơn! –

1

Không có nó không thể gọi là một cơ sở nhà xây dựng không phải mặc định ngầm, bạn phải làm cho nó rõ ràng.

1

Bạn cần triển khai rõ ràng chuỗi đó. Ngoài ra, quan trọng, trong mã ban đầu của bạn, bạn sẽ không thể gọi số new B(), vì A không có hàm tạo mặc định và B không gọi hàm tạo của A có arg.

+0

Cảm ơn và xin lỗi, đã bỏ qua hàm tạo mặc định cho ngắn gọn. –

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