2010-05-26 30 views
36

Ok đây là bugging tôi .. Tôi biết tôi đã đọc nó ở đâu đó và google không giúp đỡ.phương pháp mà không cần sửa đổi truy cập

Mức độ trợ năng của phương thức không chỉ định công cụ sửa đổi truy cập là gì?

void Foo() 
{ 
    //code 
} 

Tôi muốn nói internal nhưng tôi không chắc chắn 100%.

+0

Trong đó ngôn ngữ? –

+0

@steve xin lỗi, thêm thẻ C#. –

Trả lời

39

Khả năng tiếp cận mặc định cho một loại internal, nhưng sự tiếp cận mặc định của của kiểu đó thành viên phụ thuộc vào loại.

Nói chung, các thành viên của một lớp private theo mặc định, nơi như thành viên của một structpublic theo mặc định. Điều này thay đổi theo ngôn ngữ; các biến tố truy cập cấu trúc mặc định cho C++ là công khai, trong đó đối với C#, chúng là riêng tư.

+7

Các bạn có chắc chắn về downvote này không? Nếu tôi đặt một phương thức trong một lớp C#, không có trình sửa đổi truy cập, trình biên dịch C# 3.0 sẽ xây dựng nó như một phương thức riêng. –

+1

Steve là chính xác. Khả năng truy cập mặc định cho các phương thức lớp là 'private'. Hãy thử nó cho chính mình. –

+1

Câu trả lời này là chính xác. Chỉ cần xác minh nó trong VS2010 bởi vì tôi ban đầu nghĩ rằng nó đã sai quá. – Donnie

9

Đối với lớp: Nội bộ là mặc định nếu không có công cụ sửa đổi truy cập nào được chỉ định.

Đối với một phương pháp: Riêng tư là mặc định nếu không có công cụ sửa đổi truy cập nào được chỉ định.

15

Có, internal là mặc định cho các lớp học, nhưng private là mặc định cho các thành viên.

17

Giả sử đây là phương pháp C#, vì bạn có thẻ ".net".

Mọi người cần phân biệt giữa khả năng truy cập "thành viên" và trợ năng "lớp".

5

Từ C# Ngôn Ngữ Lập Trình, Third Edition bởi Anders Hejlsberg et al, phần 10.3.5 ("Class Thành viên - Modifiers truy cập") trên trang 434:

Một lớp -thông báo kê khai có thể có bất kỳ một trong năm loại khả năng truy cập có thể khai báo nào (§3.5.1): public, protected internal, protected, internal hoặc private. Ngoại trừ kết hợp protected internal, đây là lỗi biên dịch thời gian để chỉ định nhiều công cụ sửa đổi truy cập. Khi một tuyên bố thành viên lớp không bao gồm bất kỳ công cụ sửa đổi truy cập nào, thì giả định private. [tôi nhấn mạnh]

Và sau đó trong phần 11,2 ("Struct Thành viên") trên trang 539:

Trừ những khác biệt lưu ý trong §11.3, các mô tả của các thành viên lớp được cung cấp trong §10.3 thông qua §10.14 cũng áp dụng cho các thành viên cấu trúc.

Mục 11.3 không đề cập đến bất cứ điều gì về bổ truy cập, vì vậy đọc sách của tôi điều này ngụ ý rằng các thành viên của một struct mà không có một sửa đổi lần truy cập cũng private là theo mặc định. Điều này tương ứng với what MSDN says và với kinh nghiệm của riêng tôi.

3

Oh chờ đợi, có một điều nữa .... tờ khai

interface phương pháp là tất nhiên public theo định nghĩa. Do đó, triển khai sau đây là public, không có công cụ sửa đổi truy cập rõ ràng.

public class MyClass : IEqualityComparer<MyClass> 
    bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {} 
} 
+0

phương thức giao diện btw không thể là riêng tư – Dragon

+0

oh, yeah ... [ Thừa kế 'EqualityComparer' được khuyến khích, không thực hiện giao diện] (https://msdn.microsoft.com/en-us/library/ms132123%28v=vs.110%29.aspx). Xem nhận xét" – radarbob

0

Phương thức lớp là riêng tư và được đóng dấu theo mặc định trong .NET. Điều này có nghĩa là phương thức chỉ hiển thị trong lớp và không thể bị ghi đè bởi lớp được thừa hưởng.

0

hy vọng điều này làm rõ tất cả theo ảnh chụp màn hình trực tiếp từ MSDN

enter image description here

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