2012-03-12 27 views
7

OK vì vậy tôi hiểu rằng VB6 ion, tính đóng gói trong một lớp có thể thuộc một trong ba loại:sự khác biệt giữa tài sản công cộng, bạn bè và Variable Công trong VB6 là gì

  • Công Sở hữu
  • công Variable

sự khác biệt giữa các là gì và làm thế nào để những so sánh với tài sản công cộng và tư nhân trong một ngôn ngữ hiện đại hơn như C#?

+3

Er, bạn đã quên thuộc tính Riêng tư. Trong mọi trường hợp, câu hỏi cơ bản này được trả lời dễ dàng bằng cách đọc sách hướng dẫn. – Bob77

Trả lời

9

Các phạm vi vòng loạiPublicFrienddetermine liệu khách hàng trong các dự án khác nhau có thể xem mục không.

  • Public mục này sẽ có thể truy cập vào mã khách hàng trong các dự án khác mã trong cùng một dự án.
  • Friend các mục chỉ có thể được mã trong cùng một dự án, không phải để mã trong các dự án khác.
  • Private các mục chỉ có thể được mã hóa trong cùng một lớp.

Thuộc tính khác với biến công, bởi vì với tài sản mà bạn có thể thực thi mã của riêng bạn khi khách hàng nhận được hoặc đặt giá trị . EDIT theo nhận xét của Deanna: Cũng lưu ý rằng các biến có thể được truyền ByRef sang một hàm và các thay đổi sẽ hoạt động như mong đợi. Đây không phải là trường hợp cho các thuộc tính.

NB C# có thể hiện đại hơn, nhưng IMHO xử lý VB6 thuộc tính và biến công khai là significantly better so với điều trị .Net.

  • Trong VB6, bạn có thể thay đổi biến công khai thành thuộc tính mà không vi phạm khách hàng. Bạn thậm chí không cần phải biên dịch lại chúng. Not true in .Net.
  • Trong VB6 biến công cộng có thể được sử dụng với ràng buộc dữ liệu. Not true in .Net.
  • Trong VB6 biến công cộng có thể được sử dụng với giao diện. Not true in .Net.

IMHO Microsoft đã mắc lỗi thiết kế thực sự trong việc tạo ra sự khác biệt giữa các thuộc tính và trường công khai trong .Net. Không thuyết phục? Sau lần phát hành đầu tiên của .Net, các trình biên dịch C#VB được sửa đổi để hỗ trợ automatically implemented properties. Điều này cho phép bạn tạo thuộc tính chỉ trong một dòng mã, để sau này có thể thêm logic vào get/set mà không gây ra sự cố. IMHO điều này chứng minh rằng các biến công cộng nên đã được thực hiện không thể phân biệt từ tài sản.


1 Giả sử loại dự án của bạn thực sự cho phép lớp học của bạn được sử dụng bởi các dự án khác (ví dụ: ActiveX DLL, OCX, hoặc ActiveX exe).
2 Trong các thủ tục Property Get, Property LetProperty Set.

+0

Trong VB6, các biến công khai được định nghĩa trong các lớp được biên dịch dưới dạng các thuộc tính. Điều này có thể được nhìn thấy bằng cách sử dụng một công cụ như OLE View để kiểm tra dll sau khi nó được biên dịch. Chúng tương đương với "các thuộc tính được tự động triển khai" mà bạn đã đề cập. – tcarvin

+0

Xin lỗi, khi tôi thấy "Trong VB6 bạn có thể thay đổi biến công khai thành một thuộc tính mà không vi phạm các khách hàng" Tôi nghĩ nó có thể tạo ấn tượng cho OP rằng VB6 có biến công khai trong các lớp tiếp xúc. – tcarvin

+1

Cũng lưu ý rằng các biến có thể được chuyển ByRef sang một hàm và các thay đổi sẽ hoạt động như mong đợi. Đây không phải là trường hợp cho các thuộc tính. Tôi hy vọng đây là lý do tại sao họ được chia thành các lĩnh vực và tài sản trong NET/IL. – Deanna

2
  • Công khai nghĩa là mọi lớp khác có thể truy cập được refferences dự án/dll của bạn.
  • bạn bè có nghĩa là nó có thể truy cập bằng cách bất kỳ lớp khác trong assembly của bạn (để chỉ exe bạn thực hiện các lớp trong)

biến và tài sản là allmost giống nhau. Tài sản được ưa thích vì bạn có thể thiết lập nếu các lớp khác có thể thiết lập hoặc lấy biến (bất động sản đóng gói biến)

Trong C# nó là như nhau, chỉ có bạn sử dụng nội bộ thay vì bạn bè

1

tài sản riêng là những tài sản được sử dụng bởi chính chúng ta và thành viên khác trong gia đình. Nhưng, tài sản công cộng là những tài sản được sử dụng bởi tất cả mọi người trong cộng đồng, xã hội hoặc quốc gia của chúng tôi.

+0

Tương tự như vậy đơn giản, nhưng tôi nghĩ nó thực sự mô tả nó tốt. –

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