Khả năng hiển thị mặc định cho các lớp và thành viên C # (trường, phương thức, v.v.)?


164

Tôi đang cố gắng tìm một tài liệu tham khảo cho khả năng hiển thị mặc định của các khía cạnh khác nhau của C #. Các loại lớp, trường, phương thức, enums, vv

Ai đó có thể cung cấp một danh sách này cùng với khả năng hiển thị mặc định của họ (nghĩa là không có công cụ sửa đổi tiền tố)?


có thể trùng lặp với công cụ sửa đổi truy cập mặc định trong C #
Jeff Sternal

8
Tôi sẽ không coi đó là một bản sao ... câu hỏi đó là cụ thể (Mặc định này là gì?), Câu hỏi này rất rộng (TẤT CẢ mặc định là gì?)
WernerCD

Câu trả lời:


266

Tất cả thông tin bạn đang tìm kiếm có thể được tìm thấy ở đâyđây (cảm ơn Reed Copsey ):

Từ liên kết đầu tiên:

Các lớp và cấu trúc được khai báo trực tiếp trong một không gian tên (nói cách khác, không được lồng trong các lớp hoặc cấu trúc khác) có thể là công khai hoặc nội bộ. Internal là mặc định nếu không có sửa đổi truy cập được chỉ định .

...

Mức truy cập cho các thành viên lớp và các thành viên cấu trúc , bao gồm các lớp và cấu trúc lồng nhau, theo mặc địnhriêng tư .

...

giao diện mặc định để truy cập nội bộ .

...

Các đại biểu hành xử như các lớp và cấu trúc. Theo mặc định, họ có quyền truy cập nội bộ khi được khai báo trực tiếp trong một không gian tên và quyền truy cập riêng khi được lồng .


Từ liên kết thứ hai:

Các loại cấp cao nhất , không được lồng trong các loại khác, chỉ có thể có khả năng truy cập nội bộ hoặc công khai. Khả năng truy cập mặc định cho các loại này là nội bộ .

Và đối với các loại lồng nhau:

Thành viên của khả năng truy cập thành viên mặc định
---------- ----------------------------
enum công khai
lớp học riêng
giao diện công cộng
cấu trúc riêng

6
Một phần tổng hợp đẹp từ thông tin của Reed, nhưng bạn đã quên chỉ định rằng các công cụ sửa đổi truy cập đó cũng áp dụng cho các phương thức.
Joel

4
@Joel Ý bạn là gì? Ông nói rõ "các thành viên". Thành viên là dữ liệu và hành vi và do đó bao gồm các phương pháp.
nghĩa

Trong trường hợp bất kỳ nhà phát triển vb.net đang xem xét điều này, vb là khác nhau. Phạm vi mặc định cho các thành viên lớp vb là Public. Enumcác thành viên cũng được Public. Có lẽ ít gây nhầm lẫn hơn khi chỉ sử dụng phạm vi rõ ràng trong trường hợp của bạn vì khả năng cao nó sẽ được dịch hoặc đọc bởi các nhà phát triển c # tại một số điểm. Thật không may, việc tạo mã trong vb.net không làm điều này cho bạn.
chập chững 11/03/2015

Tôi sẽ thêm rằng một giao diện lồng nhau trong một lớp là riêng tư, không phải nội bộ, theo mặc định.
Frank Bryce

13

Từ MSDN:

Các loại cấp cao nhất , không được lồng trong các loại khác, chỉ có thể có internalhoặc publickhả năng truy cập. Khả năng tiếp cận mặc định cho các loại này là internal.


Các loại lồng nhau , là thành viên của các loại khác, có thể đã khai báo khả năng truy cập như được chỉ ra trong bảng sau.

Khả năng truy cập thành viên lồng nhau mặc định & Bộ điều chỉnh truy cập được phép

Nguồn: Mức Khả năng tiếp cận (C # tham khảo) (6 tháng 12 ngày , 2017)


9

Theo mặc định, công cụ sửa đổi truy cập cho một lớp là internal. Điều đó có nghĩa là, một lớp có thể truy cập trong cùng một hội đồng. Nhưng nếu chúng ta muốn lớp được truy cập từ các hội đồng khác thì nó phải được công khai.


19
Thông tin này đã có mặt trong các câu trả lời khác. Bạn chỉ nên trả lời một câu hỏi, đặc biệt là một câu hỏi cũ như thế này, khi bạn có thêm thông tin để cung cấp hoặc bạn nghĩ rằng các câu trả lời khác là sai. Dù sao, chào mừng bạn đến với Stack Overflow.
Gorpik

Một lớp không nhất thiết phải được công khai để có thể truy cập được cho các hội đồng khác. Người ta có thể sử dụng Lớp InternalsVisibleToAttribution[assembly:InternalsVisibleTo("Friend1b")]
adam

0

Theo mặc định là private. Trừ khi chúng được lồng, các lớp là internal.


1
không mặc định công khai mặc định?
Ryan Peters

4
@Jay: Trừ khi chúng được lồng vào nhau. @Ryan: Không, enum không lồng nhau là nội bộ theo mặc định.
Jon Skeet

2
@Ryan: Các thành viên Enum được công khai theo mặc định, nhưng bản thân enum là nội bộ.
Sậy Copsey

@ReedCopsey Nhưng cuốn sách tôi đang học từ đó nói rõ điều đó enum members are private by default, so to use them outside the enum we should declare them as public. Bạn có thể vui lòng giải thích tại sao cuốn sách mâu thuẫn với những gì bạn nói không? Cảm ơn.

Bất cứ cuốn sách nào @ user5794376 (rõ ràng là một tài khoản đã bị xóa) đang đọc nên được cung cấp tất cả các đánh giá 1 sao nếu những gì họ nói trong cuốn sách là đúng. Chỉ cần nhìn vào Microsoft Docs để biết rằng các thành viên enum được công khai theo mặc định và đó là lý do tại sao thông thường chỉ dành cho enum để không nói rõ về họ.
Rodney S. Foley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.