2009-05-05 65 views
7

Các thành viên tĩnh của một lớp cá thể chỉ tồn tại miễn là bản thân cá thể đó, hay thành viên tĩnh tồn tại trong suốt vòng đời của ứng dụng?Các thành viên tĩnh của một lớp thể hiện

Ví dụ: giả sử tôi có một Hashtable làm thuộc tính tĩnh. Nếu tôi thêm các mục vào nó từ một "Instance" thì chúng có sẵn từ một "Instance" khác không?

Trả lời

16

Chúng tồn tại trong suốt thời gian tồn tại của AppDomain. (Đối với các ứng dụng Windows, đó thường là thời gian tồn tại của quá trình; nó có thể không mặc dù, tùy thuộc vào chính xác những gì bạn đang làm. AppDomains được tái chế định kỳ trong ASP.NET.)

Đừng nghĩ đến các biến tĩnh như được chia sẻ giữa các trường hợp - hãy nghĩ về chúng là thuộc loại loại hơn là bất kỳ trường hợp cụ thể nào. Điều này giúp bạn dễ dàng hiểu cách mọi thứ hoạt động khi bạn đôi khi không bao giờ tạo ra bất kỳ trường hợp nào.

Ví dụ:

class Test 
{ 
    static int x = 0; 

    static void Main() 
    { 
     x = 10; 
     Console.WriteLine(x); 
    } 
} 

Không có trường hợp xung quanh để "chia sẻ" Test.x - nhưng đó là okay, vì nó kết hợp với loại Test hơn với trường của Test.

Bạn có thể cho rằng đây là một sự khác biệt khá tinh tế, nhưng đó là điều tôi thấy hữu ích.

+0

Tôi có xu hướng nghĩ về điều này "liên quan đến loại _and_ được chia sẻ giữa tất cả các trường hợp". –

+2

@ Jelel: Nhưng điều đó vẫn không cho cảm giác sai lầm rằng các trường hợp có liên quan gì đến nó không? Bạn có thể tranh luận không kém hiệu quả rằng Test.x được chia sẻ trong tất cả các trường hợp của "chuỗi" :) –

+5

Tôi có xu hướng nghĩ rằng các thành viên tĩnh có NOTHING để làm với các trường hợp khác với tên loại và xử lý truy cập sửa đổi, vì vậy tôi ' m với Jon hơn là Joel trên cái này. –

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