2012-06-18 27 views
6

Tôi đã thêm một biến lớp vào lớp cơ sở của phân cấp lớp sâu. Đó là một số nguyên dùng để đếm số lượng cá thể được tạo cho mỗi loại lớp. Nhưng tôi đã gặp rắc rối.Biến Delphi Class cho mỗi lớp

Với ví dụ:

TBaseClass = class 
    private 
    class var fCreated: integer; 
    public 
    class function NewInstance: TObject; override; 
    end; 

    TDescendant = class(TBaseClass) 
    end; 

    ... 

    class function TBaseClass.NewInstance: TObject; 
    begin 
    result := inherited NewInstance; 
    inc(fCreated); 
    end; 

Tôi cho rằng tôi có thể sử dụng var lớp để lưu trữ các số trường hợp tạo mỗi lớp, nhưng điều này dường như không phải là trường hợp.

Kiểm tra TBaseClass.fCreated trả về cùng giá trị như TDescendant.fCreated, thay đổi một thông qua thanh tra thay đổi khác, do đó, nó hoạt động như thể fCreated là một var toàn cục.

Tôi mong đợi fCreated được duy trì cho mỗi loại lớp, không phải là vấn đề phải không? Tôi đang thiếu gì?

Trả lời

8

Bạn không có gì. Phân tích của bạn về cách các biến lớp hoạt động chính xác. Một lớp var không có gì khác hơn là một biến toàn cục được lớp đó dàn xếp.

Một giải pháp đơn giản cho bạn là sử dụng từ điển để đếm các phiên bản. Một cách tiếp cận hacky hơn là sử dụng một mẹo của tôi mà Hallvard Vassbotn viết blog về, mà (ab) sử dụng VMT để lưu trữ các trường cụ thể cho từng lớp. Bạn có thể đọc tất cả về nó here.

+0

Nhận xét tương tự đã được đưa ra ở đây: http://stackoverflow.com/a/72496/12170 – PatrickvL

+0

Hacky nhưng làm những gì tôi muốn –

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