Tại sao mã phía sau một lớp từng phần cho các trang aspx?Tại sao tệp aspx code-behind được khai báo là các lớp một phần?
Trả lời
tôi sẽ giới thiệu bạn đến này MSDN Page (ASP.NET Page Class Tổng quan).
Khi trang được biên soạn, ASP.NET tạo một lớp học một phần dựa trên tệp .aspx; lớp này là một phần của lớp của tệp lớp mã-đằng sau. Tệp lớp một phần được tạo chứa các khai báo cho các điều khiển của trang. Lớp học một phần này cho phép tệp mã phía sau của bạn được sử dụng làm một phần của một lớp hoàn chỉnh mà không cần yêu cầu bạn khai báo các điều khiển một cách rõ ràng.
Xem biểu đồ này:
alt text http://img30.imageshack.us/img30/7692/msdnchart.gif
Bằng cách này bạn có một lớp có chứa logic của bạn và một lớp có chứa thiết kế thứ. Tại thời gian biên dịch nó được tạo ra như một toàn thể.
Đây là một trong những biểu đồ "cho phép tạo biểu đồ từ thứ gì đó không phải là biểu đồ". – womp
"Mô hình kế thừa cho các trang mã sau hơi phức tạp hơn so với các trang đơn tệp" Phần trong Bài viết MSDN đó rất hữu ích để hiểu biểu đồ này tốt hơn –
Bởi vì có những bộ phận khác của lớp (thứ Designer) đó là ẩn từ nhà phát triển
Ví dụ, thay vì điều này
public MyBasePage : System.Web.UI.Page
{
...
protected System.Web.UI.Label lblName;
protected void Page_Load(object sender, EventArgs e)
{
}
...
}
ASP.NET sẽ tạo các những tờ khai trong các tập tin vật lý khác nhau, để lại này
public partial class MyBasePage : System.Web.UI.Page
{
...
protected void Page_Load(object sender, EventArgs e)
{
}
...
}
Thông tin thêm:
bạn có thể xây dựng? là nó tương tự như các tập tin thiết kế winforms? – andrewWinn
@andrewWinn - yep, nó là tương đương với tệp thiết kế winforms - trong ASP.NET 1.1 sẽ có tất cả các khai báo điều khiển ở đầu mã phía sau của bạn, và sau đó một vùng được thu gọn ở dưới cùng được nhận xét dọc theo dòng " Nhà thiết kế đã tạo, không sửa đổi "nơi tất cả các sự kiện đã được kết nối. –
@jaun, liên kết bạn đã cung cấp không hoạt động. – ShaileshDev
Khai báo một phần cho phép bạn viết mã trong các tệp khác - chỉ cần đặt mã trong cùng một không gian tên và đặt tên cho lớp giống nhau và chúng sẽ được xử lý như thể chúng nằm trong cùng một tệp. Thật tuyệt vời khi thêm chức năng vào các tệp được tạo. Tôi thường xuyên sử dụng nó để thêm các hàm/thuộc tính vào đối tượng LinqToSql của tôi.
Thêm vào đó giúp giữ tất cả mã được tạo xấu xí khỏi bạn và vô tình chỉnh sửa nó. Bạn phải có mục đích nhiều hơn bây giờ để chỉnh sửa nó .... :) – klabranche
Lý do khác cho một phần tệp là xử lý trường hợp một số định nghĩa lớp được tạo bởi công cụ (Và có thể được tạo lại tại một số điểm) và phần còn lại của lớp được bạn triển khai.
Trong trường hợp này, không sử dụng một phần lớp sẽ dẫn đến mã của bạn bị ghi đè hoặc quá trình tạo khó khăn khi thực hiện công việc của mình (Nếu có thể làm được).
Với các lớp từng phần, mã được tạo có thể dễ dàng được tạo lại mà không cần chạm vào mã của bạn.
Một ví dụ điển hình khác là khi sử dụng lớp DataContext cho LINQ-to-SQL: Công cụ thực sự thông minh được tạo thành một tập hợp các tệp lớp một phần và bạn có thể cung cấp triển khai - để xác thực, v.v. lớp học, an toàn trong kiến thức rằng tái tạo sẽ không phá hủy công việc của bạn.
Aspx.cs sử dụng lớp PARTIAL vì các điều khiển (ví dụ: TextBox, GridView) được truy cập trong lớp này được khai báo trong tệp .Aspx (tức làVề mặt vật lý Một tệp khác) do đó, một lớp chứa khai báo kiểm soát (tệp .aspx) và một logic nghiệp vụ khác dựa trên các điều khiển được khai báo trên tệp .aspx. khi họ được biên soạn, coi như toàn bộ một lớp duy nhất.
- 1. Tại sao lớp java.util.Scanner được khai báo là 'cuối cùng'?
- 2. Tại sao lớp HttpServlet được khai báo là trừu tượng?
- 3. tại sao hằng số java được khai báo là tĩnh?
- 4. Tại sao bạn lại muốn một tệp Java không có lớp công khai được khai báo trong đó?
- 5. Tại sao WebMethod được khai báo là Tĩnh?
- 6. Khai báo JAXB là phụ thuộc. Tại sao?
- 7. Tại sao lớp của tôi không thể triển khai giao diện được khai báo bên trong?
- 8. Tại sao các biến được khai báo bằng "của chúng tôi" hiển thị trên các tệp?
- 9. Tại sao phương thức giao diện C# được triển khai trong một lớp là công khai?
- 10. Tại sao một khai báo enum được đánh dấu const?
- 11. Nếu một lớp được khai báo là cuối cùng thì cần phải khai báo các phương thức như là số
- 12. Tại sao một enum được khai báo trong một tệp riêng biệt, trong Java?
- 13. Tại sao việc triển khai và khai báo một lớp mẫu phải nằm trong cùng một tệp tiêu đề?
- 14. Tại sao chờ() và thông báo() được khai báo trong lớp Object của Java?
- 15. Tại sao sử dụng macro trong khai báo lớp
- 16. Tại sao tệp chỉ được tải lên một phần?
- 17. Tại sao các hàm chuỗi cần được khai báo là '__cdecl'?
- 18. Tại sao giao diện chỉ có thể được khai báo trong lớp cấp cao nhất?
- 19. Tại sao C# giới hạn tập các loại có thể được khai báo là const?
- 20. Tại sao Comparator lại khai báo bằng?
- 21. Tại sao IIS không phục vụ các trang aspx?
- 22. Tại sao tôi nên khai báo một destructor ảo cho một lớp trừu tượng trong C++?
- 23. Tại sao chúng ta nên khai báo các phương thức giao diện là công khai?
- 24. Tại sao System.in được khai báo là nullInputStream() thay vì null?
- 25. Tại sao không thể null được khai báo const?
- 26. Khai báo một mảng có kích thước được khai báo là extern const
- 27. Mục đích của các lớp học một phần là gì?
- 28. Tại sao các mẫu không thể được khai báo trong một hàm?
- 29. Tại sao InitializeComponent là công khai
- 30. Tại sao DialogFragment không thể là một lớp bên trong?
Và bạn nên chỉnh sửa tiêu đề câu hỏi của mình. Nó không phải là một câu hỏi _stupid_. –
"Không có câu hỏi ngu ngốc, chỉ có những người ngu ngốc" - Ông Garrison, South Park. OK, do đó không áp dụng ở đây, tôi chỉ thích câu nói đó. : D – Powerlord
Câu hỏi ngu ngốc duy nhất là câu hỏi mà bạn không hỏi. – belugabob