2010-10-26 34 views
14

Nếu tôi có một lớp có thuộc tính tĩnh được đặt khi người dùng tải một trang cụ thể, giá trị tĩnh đó có duy nhất cho phiên người dùng đó không?Tính chất tĩnh hoạt động như thế nào trong môi trường asp.net?

Nói cách khác, nếu người dùng thứ hai sau đó tải trang và đặt thuộc tính tĩnh, mỗi người dùng sẽ có giá trị riêng biệt hay cả hai sẽ sử dụng giá trị người dùng thứ hai?

+1

Các bạn đã đọc tài liệu hoặc thử nó ra cho mình? –

Trả lời

13

Thống kê là duy nhất cho miền ứng dụng, tất cả người dùng của miền ứng dụng đó sẽ chia sẻ cùng một giá trị cho mỗi thuộc tính tĩnh. Khi bạn nhìn thấy từ tĩnh, hãy nghĩ rằng "sẽ chỉ có một trường hợp này". Ví dụ kéo dài bao lâu là một câu hỏi riêng biệt, nhưng câu trả lời ngắn gọn là nó biến đổi.

Nếu bạn muốn lưu trữ các giá trị cụ thể cho người dùng, hãy xem Session State.

1

Không, không có gì đặc biệt chỉ vì đó là asp.net. ASP.NET chính nó chỉ là một bộ sưu tập lắp ráp NET thường xuyên. Nếu bạn muốn lưu mọi thứ trên mỗi phiên thì bạn nên sử dụng trạng thái phiên. Nếu không, hãy cẩn thận vì có nhiều luồng có thể truy cập dữ liệu tĩnh của bạn. Bạn nên đọc và tìm hiểu các chủ đề, khóa và điều kiện chủng tộc hoạt động cùng nhau như thế nào.

2

Trường và thuộc tính tĩnh được chia sẻ trên tất cả các phiên bản của một lớp. Tất cả người dùng của bạn sẽ kết thúc chia sẻ cùng một giá trị.

Giá trị sẽ ở đó cho đến khi quá trình nhân viên ASP.NET tự tái chế (điều này xảy ra định kỳ).

+0

+1 - Tôi đã có một chút, đã lừa gạt logic phân công đối với một thuộc tính tĩnh. Giá trị bị mắc kẹt trong khoảng thời gian đủ dài để tôi gần như quên đi nó, và có một ngày hay thư giãn trong khi hồ bơi * đã * thực sự tái chế. Đạo đức của câu chuyện: hãy cẩn thận với statics, như trong mọi trường hợp, nhưng đặc biệt là trong ASP.NET. – Dan

2

Ngoài câu trả lời của Bob, có ngoại lệ này của khóa học:

public static object Item { 
    get { return HttpContext.Current.Session["some_key"]; } 
} 
+0

Và nhiều mục khác: 'HttpContext.Current' chính nó là ví dụ và' DateTime.Now'. Các trường tĩnh được chia sẻ (trừ khi được trang trí với thuộc tính 'ThreadStatic'), nhưng các thuộc tính tĩnh có thể làm bất cứ điều gì chúng muốn. – Joe

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