truy cập các thành viên không công khai

lập trình


Làm cách nào để chúng tôi truy cập các thành viên không công khai?

Tôi có một đối tượng tên làdosSuggestiions có một thành viên không công khai được gọi là “tần số”

Tôi muốn truy cập tương tự.

Xin hãy giúp tôi việc này

Giải pháp 1

Về cơ bản, chúng ta có 4 access modifier trong C#. công cộng, được bảo vệ, nội bộ và riêng tư. Dưới đây là các định nghĩa cho từng sửa đổi:

1. Các công cộng [^] từ khóa là công cụ sửa đổi truy cập cho các loại và loại thành viên. Truy cập công cộng là cấp độ truy cập dễ dàng nhất. Không có hạn chế về việc truy cập các thành viên công cộng.

2. Các được bảo vệ[^] từ khóa là công cụ sửa đổi quyền truy cập thành viên. Một thành viên được bảo vệ có thể truy cập được từ bên trong lớp mà nó được khai báo và từ bên trong bất kỳ lớp nào dẫn xuất từ ​​lớp đã khai báo thành viên này.

3. Các nội bộ[^] từ khóa là công cụ sửa đổi truy cập cho các loại và loại thành viên. Các thành viên nội bộ chỉ có thể truy cập được trong các tập tin trong cùng một hội đồng. Việc sử dụng phổ biến quyền truy cập nội bộ là trong phát triển dựa trên thành phần vì nó cho phép một nhóm thành phần hợp tác theo cách riêng tư mà không bị lộ phần còn lại của mã ứng dụng. Ví dụ: một khung để xây dựng giao diện người dùng đồ họa có thể cung cấp các lớp Điều khiển và Biểu mẫu hợp tác sử dụng các thành viên có quyền truy cập nội bộ. Vì các thành viên này là thành viên nội bộ nên họ không được tiếp xúc với mã đang sử dụng khung.

4. Các riêng tư[^] từ khóa là công cụ sửa đổi quyền truy cập thành viên. Quyền truy cập riêng tư là mức truy cập ít được phép nhất. Các thành viên riêng tư chỉ có thể truy cập được trong nội dung của lớp hoặc cấu trúc mà chúng được khai báo

Vì vậy, tóm lại, tùy thuộc vào biến không công khai, các thành viên của bạn có các cấp độ tiếp cận khác nhau.

Giải pháp 3

Chỉ có một cách để truy cập các thành viên không công khai: Reflection. Vấn đề là phương pháp này ít được hỗ trợ hơn. Ví dụ: bạn có thể tìm thấy một thành viên theo tên, nhưng nếu bạn gõ nhầm chuỗi hoặc tên bị thay đổi sau đó, việc kiểm tra thời gian biên dịch sẽ không cảnh báo bạn — bạn sẽ không tìm thấy thành viên đó. Bạn có thể tìm thấy tất cả các thành viên chung dưới dạng một mảng thành viên đa hình hoặc riêng biệt tất cả các trường, tất cả thuộc tính, tất cả sự kiện, tất cả phương thức, tất cả hàm tạo hoặc giao diện được triển khai. Bạn có thể giới hạn tìm kiếm theo thành viên công khai hoặc không công khai.

Hãy sử dụng các phương pháp sau đây System.Type: FindInterfaces, GetInterface, GetInterfaces, GetMember, GetMembers, GetMethod, GetMethods, GetProperty, GetProperties, GetEvent, GetEvents, GetConstructorImpl, GetConstructor.

Nhìn thấy http://msdn.microsoft.com/en-us/library/system.type.aspx[^].

Để tìm các phương pháp không công khai, bạn cần sử dụng các phiên bản của “Get...“phương pháp sử dụng System.Reflection.BindingFlags tham số; sử dụng System.Reflection.BindingFlags.NonPublic hoặc System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public

-SA

Giải pháp 2

Tạo một Tài sản công cộng, bạn sẽ có thể truy cập nó.

Giải pháp 39

Câu trả lời đơn giản là nhu cầu truy cập vào một thành viên riêng tư là một sai lầm, lỗi thiết kế.

Một chiến lược được sử dụng để cho phép các cấp độ truy cập khác nhau vào các phương thức/trạng thái nội bộ của Lớp là giải quyết các vấn đề bảo mật ở cấp độ HĐH (nhóm, quyền, người dùng).

Hãy suy nghĩ về cách đăng nhập internet có thể giữ quyền của người dùng và quản trị viên để sửa đổi mã; về cách truy cập vào cơ sở dữ liệu an toàn với các cấp độ quyền đọc/ghi khác nhau.

Một chiến lược khác là chuyển một loại mã bảo mật nào đó vào hàm tạo của Lớp: đó luôn là một rủi ro bảo mật.

Nếu bạn không viết mã, bạn không thể sửa đổi nó, v.v., bạn là hack mã … một nhiệm vụ rất không mong muốn.

コメント

タイトルとURLをコピーしました