2009-01-15 18 views
13

Tương đương với từ khoá 'bạn' trong C Sharp là gì?Tương đương với từ khoá 'bạn' trong C Sharp là gì?

Làm cách nào để sử dụng từ khóa 'nội bộ'?

Tôi đã đọc rằng từ khóa 'nội bộ' là thay thế cho 'bạn' trong C#.

Tôi đang sử dụng DLL trong dự án C# của mình mà tôi có mã nguồn nhưng tôi không muốn sửa đổi mã hiện có. Tôi đã thừa kế lớp và tôi có thể sử dụng lớp được thừa kế của mình theo bất kỳ cách nào tôi muốn. Vấn đề là hầu hết mã trong lớp cha đều có các phương thức được bảo vệ. Sẽ sử dụng một người bạn bằng cách nào đó làm cho nó có thể truy cập hoặc gọi những phương pháp được bảo vệ?

+5

Hãy làm rõ câu hỏi này, vì cả VB và C đều có từ khóa bạn bè. Không có tương đương với từ khóa C bạn bè trong C# –

Trả lời

27
  1. Bạn có thể sử dụng công cụ sửa đổi truy cập từ khóa internal để khai báo loại hoặc loại thành viên có thể truy cập để chỉ mã trong cùng một cụm.

  2. Bạn có thể sử dụng lớp InternalsVisibleToAttribute được xác định trong System.Rutime.CompilerServices để khai báo loại có thể truy cập được mã trong cùng một hội đồng hoặc một bộ phận được chỉ định.

Bạn sử dụng đầu tiên khi bạn sử dụng bất kỳ access modifier khác như private. Để wit:

internal class MyClass { 
    ... 
} 

Bạn sử dụng thứ hai như sau:

[assembly:InternalsVisibleTo("MyFriendAssembly", PublicKey="...")] 
internal class MyVisibleClass { 
    ... 
} 

Cả hai một cách đúng đắn có thể được coi tương đương với friend trong C#.

Phương thức protected đã có sẵn cho các lớp học có nguồn gốc.

5

1) Internal là C# equivelant của VB.NET 'người bạn' từ khóa, như bạn đã đoán (như trái ngược với một sự thay thế)

2) Cách sử dụng như sau

internal void Function() {} 
internal Class Classname() {} 
internal int myInt; 
internal int MyProperty { get; set; } 

3 Về cơ bản, đó là một công cụ sửa đổi truy cập quy định rằng khả năng truy cập của lớp/hàm/vairiable/thuộc tính được đánh dấu là nội bộ như được công khai cho Hội đồng được biên dịch, và riêng cho bất kỳ hội đồng nào khác

1

Nội bộ là equiv alent của người bạn. Một phương thức được bảo vệ chỉ có sẵn trong cùng một lớp hoặc từ một người kế thừa. Nếu bạn đang cố gắng để lộ các phương thức được bảo vệ từ một người kế thừa, bạn có thể bọc chúng trong các phương thức công khai.

1

Lớp con của bạn sẽ có thể truy cập vào các thành viên được bảo vệ của lớp bạn đã kế thừa.

Bạn có muốn cấp quyền truy cập vào các thành viên được bảo vệ này cho một lớp học khác không?

24

Không, "nội bộ" là không giống như "người bạn" (ít nhất là 'người bạn' C++)

bạn xác định rằng lớp này là chỉ truy cập bằng ONE, đặc biệt lớp.
nội bộ chỉ định rằng lớp này có thể truy cập BẤT CỨ lớp học trong hội đồng.

+0

Nó không tương đương, nhưng nó là * cơ chế mà theo đó một tập các lớp làm việc cùng nhau mà không để lộ ra phần còn lại của thế giới. Nó cũng khuyến khích các mô-đun nhỏ hơn và giảm mối quan hệ 'spaghetti' giữa các lớp học. –

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