2012-02-27 57 views
8

tôi đọc about partial classes và, ví dụ, tôi hiểu lý do chúng được sử dụng khi Visual Studio tạo Windows Forms, không loại trừ rằngMục đích của các lớp học một phần là gì?

khi làm việc trên các dự án lớn, lây lan một lớp trên tập tin riêng biệt phép nhiều lập trình để làm việc trên nó cùng một lúc

.

Sau đó tôi đọc this example và tôi nhận thấy rằng hầu hết các lớp được khai báo là một phần. Tại sao?

+0

Một sử dụng được sử dụng khi bạn lưu ý trong Winforms/WPF là một cơ chế để phần máy tạo riêng từ tay mã phần. Dọc theo những dòng này nếu bạn có thể thực hiện các phép tách logic hợp lý về các hàm của một lớp, nó có thể hữu ích. – kenny

+0

Bạn sẽ phải hỏi người đã viết chúng. – svick

+0

Nếu bạn chỉ muốn biết nói chung, hãy tìm kiếm [như thế này] (http://stackoverflow.com/search?q=%5Bc%23%5D+partial+class). – Guvante

Trả lời

5

lớp một phần cho phép mã để không chỉ làm tăng thêm các lớp được tạo ra, mà còn thực hiện chức năng tùy chọn. Ví dụ, có thể có mã được tạo để thực hiện xác nhận thuộc tính (thông qua IDataErrorInfo) nhưng xác thực trên mỗi thuộc tính không thể được xác định tại thời gian thế hệ, lớp từng phần cho phép nhà phát triển xác định xác thực tại điểm sau này.

Các tập tin được tạo ra:

public partial class MyClass : IDataErrorInfo 
{ 
    partial void ValidateMyProperty(ref string error); 

    public string this[string propertyName] 
    { 
     get 
     { 
      string error = String.Empty; 
      if (propertyName == "MyProperty") 
       ValidateMyProperty(ref error); 

      return error; 
     } 
    } 

    public string Error { get { return String.Empty; } } 

    public int MyProperty { get; set; } 
} 

Các nhà phát triển tập tin thực hiện:

public partial class MyClass 
{ 
    partial void ValidateMyProperty(ref string error) 
    { 
     if (MyProperty < 0) 
      error = "MyProperty cannot be negative."; 
    } 
} 
1

Một ứng dụng thực tế là bạn có thể sửa đổi một phần lớp ở nhiều hơn một vị trí, bên trong phạm vi của không gian tên. Bạn có thể chia lớp thành nhiều tệp để có thể đọc được.

IE:
Trong HelloWorld.cs trong không gian tên "Bleh"

public partial class testClass { 
    private int intMember; 
    public string stringMember; 
} 

Trong HelloWorld2.cs trong không gian tên "Bleh"

public partial class testClass { 
    private int intAnotherInt; 
    public string stringAnotherString; 
} 

Cả lớp được tuyên bố đại diện cho điều tương tự trong thực tế, nhưng mục đích là chia lớp thành các tệp. Cả hai kết hợp thực sự trông giống như:

public partial class testClass { 
    private int intAnotherInt; // Our int from HelloWorld2.cs 
    public string stringAnotherString; // Our string from HelloWorld2.cs 
    private int intMember; // Our int from HelloWorld.cs 
    public string stringMember; // Our string from HelloWorld.cs 
} 

Thông tin thêm here.

11

Một trong những ví dụ rất tốt khi lớp học hữu ích là khi lớp được tạo tự động bởi công cụ (như VS) và bạn muốn có thể mở rộng chức năng của lớp đó và không bị mất mã khi công cụ cần để tạo lại mã của nó. Ví dụ khi bạn sử dụng Visual Studio Entity Data Model Designer, các thực thể (các lớp) sẽ được tạo ra như một phần.

5

Nếu bạn có một lớp học lớn, bạn có thể chia nhỏ định nghĩa giữa nhiều tệp nguồn.

Ngoài ra, nếu bạn muốn mở rộng một lớp được tạo - giả sử từ mẫu T4 hoặc bằng ORM - hoặc trong bất kỳ tình huống nào bạn không thể hoặc không nên sửa đổi tệp nguồn gốc, bạn có thể sử dụng một định nghĩa lớp bổ sung bổ sung để thêm chức năng mới sẽ không bị xóa khi mẫu hoặc ORM tạo lại lớp gốc.

Sửa

Chỉ cần một quan sát, nhưng báo giá của bạn:

khi làm việc trên các dự án lớn, lây lan một lớp trên tập tin riêng biệt phép nhiều lập trình viên làm việc trên nó cùng lúc

Không ngồi tốt với tôi, mặc dù đến từ MSDN. Nếu bạn đang sử dụng một hệ thống kiểm soát nguồn phong nha (như TFS hoặc thậm chí svn), hãy trộn các tệp nguồn nơi mỗi dev đang làm việc trên các phương thức riêng biệt được xử lý khá tốt.Nói rằng sử dụng một phần các lớp làm cho nó dễ dàng hơn cho nhiều nhà phát triển để làm việc trên cùng một lớp (và, tôi sẽ cược, có lẽ đã) khuyến khích ai đó ra khỏi đó để phân chia mọi phương thức và thuộc tính trong mọi lớp trong giải pháp của họ thành các tệp nguồn riêng biệt. Thật tồi tệ. Thực sự tồi tệ. Như trong, nên được tiết lộ-up-trước-khi-đàm phán-tiền lương-với-mới-thuê xấu.

0

vì liên kết bạn đã đăng đề cập đến có nghĩa là bạn có thể có một lớp đơn được chia thành nhiều tệp và nó sẽ được kết hợp lại thành một lớp duy nhất tại thời gian biên dịch.

đối với liên kết khác bạn đăng ... các lớp được đánh dấu theo cách đó vì đánh dấu (aspx) có lớp được thiết kế tạo cho bạn quyền truy cập vào những thứ được xác định trong đánh dấu mà tôi tin ...

như vậy, có ba file ... productlist.aspx, productlist.cs, và productlist.designer.cs

productlist.aspx được đánh dấu

productlist.cs là partial class được tham chiếu từ ma tệp rkup và chứa mã của bạn.

productlist.designer.cs là partial class được tạo ra mà được kết hợp với các file .cs trên

+0

Có ít nhất năm tệp có năm khai báo lớp/giao diện một phần khác nhau: lớp 'ProductBLL' trong tệp _ProductBL.cs_, lớp' Product' trong tệp _Product.cs_, giao diện 'IProductService' trong tệp _IProductService.cs_, lớp' ProductDal' trong tệp _ProductDal.cs_, lớp 'ProductService' trong tệp _ProductService.cs_. – enzom83

+0

đó là những lớp học hoàn toàn khác nhau mà không có gì để làm với nhau. Tôi đã giải thích khái niệm này trong ngữ cảnh. – Timmerz

+0

một phần là một khái niệm rất đơn giản ... nó đơn giản có nghĩa là ... một lớp duy nhất có thể được mở rộng qua nhiều tệp. đó là nó. không còn gì để hiểu. – Timmerz

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