2010-07-23 53 views
5

Có thể gọi hàm tạo của lớp con trước hàm tạo của lớp cha không?Gọi hàm tạo lớp con trước hàm tạo cha

Có người nói rằng nó thực sự là có thể với việc sử dụng một phương pháp ảo, nhưng tôi không thể tìm thấy một cách để làm như vậy.

Trả lời

8

Trong IL, điều này là có thể. Trong C#: không.

Bạn thể sử dụng virtual để chạy một phương pháp trong một loại trước ctor của loại đó, nhưng nó không được khuyến khích và nguy hiểm. Nhưng:

class Foo { 
    public Foo() { 
     Console.WriteLine("Foo ctor"); 
     SomeMethod(); // BAD IDEA (calling a virtual method in a ctor) 
    } 
    protected virtual void SomeMethod() {} 
} 
class Bar : Foo { 
    protected override void SomeMethod() { 
     Console.WriteLine("SomeMethod in Bar"); 
    } 
    public Bar() : base() { /* only to show call order */ 
     Console.WriteLine("Bar ctor"); 
    } 
} 

Đó là một ý tưởng tồi bởi vì bạn không thể đảm bảo rằng lớp con là sẵn sàng cho phương pháp gọi.

+0

+1 để không khuyến khích! –

0

Bạn đang cố gắng làm gì? Có lẽ bạn có thể có một phương thức trừu tượng được gọi từ ctor lớp cơ sở?

+1

Thực tế bạn cảm thấy bạn cần làm điều này cho tôi biết rằng có một số sai sót trong thiết kế hoặc suy nghĩ của bạn. Tôi sẽ gợi ý xem xét cẩn thận động cơ của bạn để cố gắng làm điều này. – NeilDurant

+0

Phải, đó là lý do tại sao tôi hỏi mục đích là gì ở đây. –

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