2009-07-09 60 views
6

Tôi hiểu ghi đè phương thức/chức năng xác định lại việc triển khai thực hiện trong lớp dẫn xuất từ ​​việc triển khai thực hiện trong lớp cơ sở.Tôi có nên gọi thực hiện lớp cơ sở khi ghi đè một phương thức trong C# cho ASP.NET?

Bây giờ những gì confuses me, là nếu tôi ghi đè lên một lớp trong ASP.NET như CreateChildControls() (Tôi nhặt nó một cách ngẫu nhiên không có lý do cụ thể), VS2008 tự động tạo ra:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

đủ tốt, việc thực hiện mặc định chỉ cần gọi lớp cơ sở 'CreateChildControls().

Vì vậy, nếu tôi muốn chạy một số mã, vì tôi không biết làm thế nào base.CreateChildControls(), tôi nên làm điều này:

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

hoặc, bỏ qua những gì base.CreateChildControls() hoàn toàn và chỉ cần làm

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

Trả lời

11

Đó là tùy thuộc vào bạn. Nói chung, bạn muốn gọi phương thức lớp cơ sở vì nó có thể làm nhiều thứ mà bạn không có quyền (đặc biệt là trong một lớp mà bạn không kiểm soát .. lấy nó? Kiểm soát.) Nhưng, nếu bạn rất tự tin bạn không cần (hoặc muốn) lớp cơ sở "thứ" xảy ra, bạn có thể loại bỏ cuộc gọi.

+0

Tôi thực sự ngạc nhiên rằng bạn sẽ được phép ghi đè lên một lớp cơ sở mà bạn không thuộc quyền sở hữu. – Matt

+7

Tôi phải có tự do đó. Chỉ vì tôi là con của bạn, không có nghĩa là tôi muốn làm mọi thứ như bạn. Đôi khi, tôi cần phải ra ngoài thế giới và làm những việc theo cách riêng của mình. Bạn sẽ là cha mẹ bảo vệ quá mức nếu bạn buộc tôi phải thực hiện. :) –

+0

Bắt đầu từ thực tế là tôi đang gọi lớp cơ sở khi ghi đè trong 'Điều khiển' tùy chỉnh của tôi, về việc ghi đè' OnXxxx' tôi thường nhận được rằng tôi gọi 'base.OnXxxx' ở cuối phương thức dẫn xuất của tôi. Có bất kỳ quy tắc nào về việc có nên gọi 'base.CreateChildControls' ở đầu hoặc cuối phương thức dẫn xuất không? – superjos

3

Đơn giản chỉ là câu hỏi bạn có muốn thay thế hoàn toàn hành vi hoặc thêm hành vi hay không.

Đối với một cái gì đó như CreateChildControls, bạn có thể sẽ giữ lại cuộc gọi đến lớp cơ sở.

1

tùy thuộc vào những gì bạn muốn làm. Nếu bạn muốn phương thức base.CreateChildControls() được gọi và sau đó bạn muốn thực hiện một số hành động tùy chỉnh trước hoặc sau khi phương thức được gọi, thì bạn có thể làm như vậy.

Nếu bạn muốn có toàn quyền kiểm soát những gì đang xảy ra khi CreateChildControls được gọi, thì bạn có thể đơn giản bỏ qua việc gọi nó hoàn toàn.

Thực tế là nó ở trong đó theo mặc định chỉ là một chút hướng dẫn cho bạn.

0

Nó phụ thuộc nếu bạn muốn thay thế hoặc hoàn chỉnh thực hiện cơ sở ... trong hầu hết các trường hợp, bạn nên gọi việc thực hiện cơ sở (và bạn chắc chắn nên làm điều đó trong trường hợp các phương pháp CreateChildItems ...)

0

Bạn có thể muốn xem mẫu template method. Mặc dù bạn không thể làm bất kỳ điều gì về cách các lớp thư viện được triển khai nhưng nó có thể giúp bạn đảm bảo mã bạn viết dễ sử dụng một cách chính xác.

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