2008-11-27 44 views
10

Tôi có một lớp BasePage mà tất cả các trang khác có nguồn gốc từ:Làm thế nào tôi có thể buộc hàm tạo cơ sở được gọi trong C#?

public class BasePage 

BasePage này được một nhà xây dựng có chứa mã mà phải luôn luôn chạy:

public BasePage() 
{ 
    // Important code here 
} 

Tôi muốn buộc các lớp thừa kế để gọi hàm tạo cơ sở, như vậy:

public MyPage 
    : base() 
{ 
    // Page specific code here 
} 

Làm cách nào để thực thi điều này (tốt nhất là lúc biên dịch)?

Trả lời

24

Trình tạo cơ sở sẽ luôn được gọi tại một số điểm. Nếu bạn gọi this(...) thay vì base(...) thì các cuộc gọi đó đến một hàm tạo khác trong cùng một lớp - một lần nữa sẽ phải gọi một hàm tạo khác của anh chị em hoặc một hàm tạo cha. Sớm hay muộn bạn sẽ luôn luôn nhận được một nhà xây dựng mà một trong hai cuộc gọi base(...) một cách rõ ràng hoặc ngầm gọi một constructor parameterless của lớp cơ sở.

Xem this article để biết thêm về chuỗi hàm tạo, bao gồm các điểm thực thi của các bit khác nhau (chẳng hạn như trình khởi tạo biến).

8

Trình tạo lớp cơ sở không tham số sẽ tự động chạy nếu bạn không gọi bất kỳ hàm tạo lớp cơ sở nào khác lấy đối số một cách rõ ràng.

+0

Vậy điều đó có nghĩa là tôi có thể xóa dòng có chứa: base()? – tjrobinson

+0

có, bạn hoàn toàn có thể :) –

+0

Splendid, cảm ơn. – tjrobinson

3

Trình tạo lớp cơ sở luôn được gọi, ngay cả khi bạn không gọi nó một cách rõ ràng. Vì vậy, bạn không cần phải làm thêm bất kỳ công việc nào để đảm bảo điều đó xảy ra.

1

Một trong các hàm tạo cơ sở luôn cần được gọi và hàm mặc định được gọi khi hàm tạo cơ sở không được khai báo rõ ràng.

Chỉnh sửa: được chỉnh sửa lại để rõ ràng.

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