Câu hỏi nội bộ vs công khai trong c #


Tôi muốn biết sự khác biệt giữa public và internal bộ chỉnh sửa hiển thị.

Khi nào chúng ta nên sử dụng internal trên một lớp học và khi nào public? Tôi bối rối khi một phương pháp nên public hoặc là internal.

tôi đọc cái đó internal có thể được truy cập thông qua Hội đồng, trong khi public cũng có thể được sử dụng thông qua các hội đồng nơi sự khác biệt nằm.


76
2017-11-15 06:43


gốc




Các câu trả lời:


public có thể nhìn thấy từ mọi nơi.

internal chỉ hiển thị trong một hội đồng

Bạn có xu hướng chỉ sử dụng nội bộ để bảo vệ các API nội bộ. Ví dụ, bạn có thể phơi bày một số tình trạng quá tải của một phương thức:

public int Add(int x, int y)
public int Add(int x,int y, int z)

Cả hai đều gọi phương thức nội bộ

internal int Add(int[] numbers)

Sau đó bạn có thể đặt rất nhiều tinh tế vào một phương pháp, nhưng "bảo vệ" nó bằng cách sử dụng các phương thức mặt tiền có thể giúp lập trình viên gọi phương thức một cách chính xác. (Ví dụ, phương thức triển khai với tham số mảng có thể có giới hạn giá trị tùy ý).

Cũng đáng chú ý là sử dụng Reflection, bất kỳ và tất cả các phương thức đều có thể gọi được bất kể khả năng hiển thị của chúng. Một "hack" khác để kiểm soát / truy cập vào các API ẩn nội bộ.


89
2017-11-15 06:47



trong một lớp học nội bộ tôi có thể khai báo các phương pháp công cộng ..? - NoviceToDotNet
Không, vì điều này sẽ gây ra xung đột. Trình biên dịch sẽ cho bạn biết điều này và không biên dịch được. - Program.X
@ Program.X: Trên thực tế, bạn có thể và trình biên dịch không cho bạn biết bất cứ điều gì. - O. R. Mapper
Trên thực tế tôi đến đây googling hay không này thực sự là một tính năng. Hãy tưởng tượng làm cho lớp học internal và tất cả các phương pháp public. Nếu bạn cần khả năng hiển thị cao hơn, bạn có thể đặt toàn bộ lớp học thành public lần nữa. Nhưng tôi không chắc chắn, có hay không nó có nghĩa là để được sử dụng theo cách này. Vì vậy, tôi tiếp tục googling ... chỉnh sửa Et voilà, cùng một chủ đề: stackoverflow.com/questions/9302236/… - ecth


internal là hữu ích khi bạn muốn khai báo một thành viên hoặc loại bên trong một DLL, không phải bên ngoài ...
thông thường, khi bạn khai báo thành viên là Public bạn có thể truy cập từ các tệp DLL khác. nhưng, nếu bạn cần tuyên bố một cái gì đó để được công khai ngay bên trong thư viện lớp học của bạn, bạn có thể tuyên bố nó như là Internal.
trong chính thức defenition: các thành viên nội bộ có thể nhìn thấy ngay bên trong hội đồng hiện tại ...


26
2017-11-15 06:47





internal cũng hữu ích khi viết các bài kiểm tra đơn vị. Các InternalsVisibleTo thuộc tính cho phép assembly thử truy cập các phương thức nội bộ trong assembly code của bạn. I E. bạn có thể thử nghiệm các phương thức xuất hiện riêng tư với thế giới bên ngoài mà không cần sử dụng sự phản chiếu.


9
2017-11-15 07:19





Công cộng cũng có thể được truy cập bên ngoài hội đồng. Vì vậy, khi bạn có một lớp học mà không nên truy cập mọi lớp trong hội đồng nên có thể truy cập nó, thì nội bộ là điều đúng. Nếu bạn cần truy cập bên ngoài, hãy sử dụng công khai.


5
2017-11-15 06:47





Ngoài ra, các thuộc tính được đánh dấu là internal sẽ ném một BindingExpression path error nếu được sử dụng cho DataBinding trong WPF. Vì vậy, những người phải public để hoạt động bình thường, ngay cả khi DataBinding diễn ra trong cùng một hội đồng.


0
2018-01-03 13:57





Nếu bạn có thể tham khảo lắp ráp từ bên ngoài, bạn có phạm vi của lớp học nội bộ và công cộng


-2
2018-06-23 10:36