2012-01-27 33 views
8

Tôi đã sử dụng studio trực quan một thời gian và nó làm phiền tôi mọi lúc khi tôi làm việc với Lớp học. Vấn đề là, khi tôi tạo một đối tượng của một Class I có xu hướng nhìn thấy các thành viên tư nhân thuộc về lớp đó và tôi không muốn, bởi vì nếu tôi tạo một lớp với 10 biến riêng, thì nó sẽ là một cơn ác mộng , phải có cách để ẩn thành viên riêng tư, Nếu có cách nào bạn có thể vui lòng chia sẻ với tôi? Cảm ơn bạn :)Làm thế nào để ẩn các thành viên tư nhân của một lớp học?

EDIT:

Dưới đây là một hình ảnh sẽ giúp bạn hiểu những gì tôi đang nói về,

ví dụ ở đây tôi có 2 biến riêng của LinkedList class (curSize and head) Tôi sẽ không thể thay đổi chúng từ chính vì vậy, không có điểm nhìn thấy chúng (là có?) Làm cách nào để ẩn chúng mà không thay đổi mã của tôi? có một thiết lập cho rằng trong Visual Studio?

+0

Khó để xem đó có thể là vấn đề thực sự nếu bạn đang nói về mã nguồn. Chỉ cần đặt các phần riêng vào cuối lớp. Nếu bạn đang thực sự nói về trình gỡ lỗi, tốt, đó là công việc của nó để hiển thị trạng thái của đối tượng. –

+0

Ngôn ngữ nào? nếu bạn đang nói về C#, tôi biết bạn cũng có thể sử dụng các lớp học một phần để chia nhỏ thành viên lớp thành nhiều tệp. – 000

+0

Nếu bạn đang nói về trình đơn thả xuống tự động hoàn thành, nó tuân theo quy tắc trợ năng, vì vậy các thành viên riêng tư của đối tượng loại A có thể truy cập được đối tượng khác loại A. – 000

Trả lời

4

Thật không may, điều này là không thể trong phiên bản hiện tại của Visual Studio. Trong C++, danh sách IntelliSense không được lọc theo khả năng truy cập hoặc phạm vi. Do đó, các thành viên riêng tư vẫn được hiển thị ngay cả khi mã của bạn không thực sự truy cập được. Không có cài đặt nào để tinh chỉnh hành vi này.

Bạn chỉ cần dựa vào biểu tượng khóa để cho biết rằng chúng là riêng tư và do đó không thể truy cập được. Tất cả những biểu tượng nhỏ trong cửa sổ IntelliSense do have a meaning, bạn biết đấy.

Nhưng có vẻ như tính năng này có thể sẽ có trong phiên bản tiếp theo của Visual Studio (VS11). MSDN says:

Danh sách thành viên Cải tiến. Danh sách thả xuống Thành viên danh sách sẽ tự động xuất hiện khi bạn nhập mã vào trình chỉnh sửa mã. Kết quả được lọc, để chỉ các thành viên có liên quan mới được hiển thị khi bạn nhập. Bạn có thể kiểm soát loại logic lọc được sử dụng bởi Danh sách thành viên trong hộp thoại Tùy chọn bên dưới Trình chỉnh sửa văn bản, C/C++, Nâng cao.

Ngớ ngẩn như vậy, tôi cũng rất vui mừng về điều này. Cùng với các nội dung thú vị khác như đánh dấu cú pháp tốt hơn và đánh dấu tham chiếu. Developer Preview đã sẵn sàng, vì vậy bạn có thể thử bắt đầu sử dụng nó nếu bạn muốn, nhưng nó có thể chưa sẵn sàng cho thời gian chính. Và điều này được thừa nhận là một lý do tồi tệ để nâng cấp ...

Ngoài ra, bạn có thể đầu tư vào Visual Assist X, một phần mở rộng có sẵn cho nhiều phiên bản của Visual Studio bổ sung nhiều tính năng tiện lợi cho C++ IDE và, pertinently, cải thiện lọc IntelliSense. Nó không phải là miễn phí, nhưng nó khá tuyệt vời cho các nhà phát triển C++, và nếu tôi không nghèo/đã phá vỡ/giá rẻ, tôi chắc chắn sẽ tự mua nó.

+1

Không, vẫn không hiển thị trong VS 2012 RC. Tôi đoán chúng tôi sẽ phải chờ đợi cho Visual Studio 2014 trước khi chúng tôi nhận được một tính năng đơn giản như vậy. Nếu chỉ có đội ngũ không bận rộn xấu xí-ifying UI và tước ra tất cả các màu sắc ... –

4

Bạn có thể sử dụng các vùng, như thế này:

class MyClass { 

    #region Private Variables 

    private int x; 
    private int y; 
    private int z; 

    #endregion 

} 

Visual Studio sẽ hiển thị một chút - bên cạnh dòng #region. Nhấp vào nó để ẩn các biến.

+0

Cảm ơn bạn đã trả lời! :) nhưng có cách nào để làm điều này mà không thay đổi mã nguồn của tôi? (giống như một Visual Studio thiết lập để hiển thị/ẩn các thành viên riêng của một lớp) – Malkavian

+0

@Malkavian Tôi nghiêm túc nghi ngờ rằng có một, bởi vì nó không phải là dễ dàng để làm: biến tư nhân của bạn có thể được rải rác thông qua mã của bạn, để xác định khu vực collapsable tự động sẽ khá là vấn đề. – dasblinkenlight

+0

Bạn sẽ phải sử dụng '#pragma region' trong C++ và điều đó sẽ không ngăn IntelliSense hiển thị các thành viên riêng tư (nhưng tôi nhận ra bạn đã trả lời trước khi câu hỏi được chỉnh sửa). –

5

Đây có thể không phải là câu trả lời hay nhất, nhưng nó hoàn thành công việc và nếu bạn có thể thay đổi cú pháp nhỏ hơn chắc chắn sẽ hoạt động.Một mẹo mà tôi học được từ việc quan sát các lớp std như std :: vector là chúng biểu thị các thành viên private với tiền tố _, do đó buộc tất cả các thành viên private vào phần dưới cùng của intellisense. Nó không loại bỏ chúng khỏi danh sách nhưng nó sẽ di chuyển chúng đến tận đáy để chúng không làm phiền bạn khi bạn cuộn danh sách. Dưới đây là ví dụ:

class SomeClass{ 
public: 
    int myPublicMemeber; 
private: 
    int _myPrivateMember; 
}; 
+0

wow lừa đẹp, chắc chắn sẽ xem xét việc sử dụng nó khi tôi cần phải ẩn các thành viên tư nhân Cảm ơn bạn đã trả lời của bạn! – Malkavian

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