2016-09-08 14 views
12

Tôi đang sử dụng mã nàyTại sao tôi có thể truy cập các biến lớp riêng tư từ bên ngoài lớp học, và làm cách nào để ngăn chặn nó?

type 
TSomeClass = class(TOBject) 
private 
    class var InstanceCount : integer; 
    class var TotalInstanceCount : integer; 
public 
    class function instances: integer; 
    class function totalInstances: integer; 
    constructor Create; 
    destructor Destroy; 
end; 

constructor TSomeClass.Create; 
begin 
inherited Create; 
Inc(InstanceCount); 
Inc(TotalInstanceCount); 
end; 

destructor TSomeClass.Destroy; 
begin 
Dec(InstanceCount); 
inherited; 
end; 

class function TSomeClass.instances; 
begin 
    Result := InstanceCount; 
end; 

class function TSomeClass.totalInstances; 
begin 
    Result := TotalInstanceCount; 
end; 

Tôi muốn làm một quầy dụ và tôi đặt một số biến lớp học như tư nhân. Câu hỏi đặt ra là rất dễ dàng, chỉ cần nhìn vào hình ảnh này:

enter image description here

Như bạn có thể nhìn thấy trong hộp màu đỏ, có các biến lớp mà tôi đã khai báo là tư nhân. Tôi không muốn họ xuất hiện. Tôi chỉ muốn các hàm lớp công khai có thể hiển thị các quầy. Tôi có thể làm gì?

+0

Lớp học này có được xác định trong cùng một đơn vị với biểu mẫu này không? –

+0

Có. Tôi có nên đặt lớp này trong một đơn vị khác không? và sau đó trong đơn vị chính nơi tôi có mẫu nói 'Sử dụng unitwithclass' –

+4

Không nhất thiết, mà chỉ xác nhận sự nghi ngờ của tôi. Các lớp học trong cùng một đơn vị có thể truy cập các thành viên riêng của nhau. Nếu tôi không nhầm, tôi tin rằng 'nghiêm túc tư nhân' nên làm thủ thuật cho bạn. –

Trả lời

16

Như được giải thích trong documentation, phần của lớp A private có thể được truy cập từ bất kỳ đâu trong đơn vị mà lớp đó được xác định. Để tránh điều này và loại bỏ quyền truy cập vào các thành viên lớp học tư nhân này từ nơi khác trong cùng một đơn vị, hãy sử dụng strict private để thay thế.

Tất nhiên, nếu thiết kế ứng dụng của bạn gọi, bạn cũng có thể di chuyển lớp này sang đơn vị khác, do đó sẽ tạo ra hiệu ứng bạn đang tìm kiếm.

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