2012-04-12 33 views
12

Someone once said:pháp tốt nhất để sử dụng các biến toàn cục trong C#

một "biến toàn cầu" thực sự là một biến bạn tạo chỉ đơn giản là "giữ một số thông tin" vì mô hình đối tượng của bạn là yếu, và bạn chưa tìm thấy một "mục đích thực sự" cho biến tồn tại. Biến toàn cầu hầu như luôn là dấu hiệu của một biến dạng kiến ​​trúc lớn hơn.

That might be true. Nhưng tôi không biết bất kỳ ví dụ hay về bất kỳ chương trình lớn và tốt nào được tạo ra mà không có biến toàn cục, và chắc chắn không được sử dụng nhiều như đề xuất ở trên. Scope is the actual key. Bạn có thể nói in a program with only one class rằng thông số của nó là not global vars. Nhưng chúng.

Dù sao ...

tôi vẫn đang nắm các khái niệm về singleton và, như xa như tôi có thể nói, họ actually làm cho không có ý nghĩa trong C#. Ngoài ra, tôi có cảm giác rằng khi không thể tránh được trạng thái toàn cầu, chúng tôi vẫn nên tránh sử dụng một lớp học công cộng đầy đủ là static properties:

Vì vậy, nếu không phải là người độc thân hay lớp công khai, chúng ta nên làm gì có vars toàn cầu trong C#?

Và khi nào chúng ta phải sử dụng chúng? Giả sử họ có nhiều khả năng không thể tránh được. Không bao giờ.

Và tại sao chúng ta nên tránh sử dụng một số static class hoặc static nói chung? Nếu đó thực sự là trường hợp của C#.

Trong một câu: Các phương pháp hay nhất về việc sử dụng các biến toàn cục trong Csharp là gì?

+2

Về mặt kỹ thuật, không có biến số nào như một biến toàn cục trong C#, tất nhiên chúng có thể là toàn cầu đối với một lớp và được công khai, về cơ bản cũng đạt được điều tương tự, nhưng lại giảm xuống một chút. –

+0

Tại sao không đơn giản trong C#? –

+3

Mặc dù được viết tốt và theo cách chính xác, tôi nghĩ câu hỏi này không áp dụng cho trang web này? – gbianchi

Trả lời

6

Tất cả vấn đề là ngữ cảnh.

Nếu bạn có thể xác định môi trường xung quanh biến mà bạn cần cho một tính toán, bạn có thể quấn tính toán rằng trong một lớn hơn bối cảnh nơi những toàn cầu tìm biến có một phạm vi hẹp hơn để sinh sống (họ bây giờ trong ngữ cảnh).

Điều này tốt hơn vì bây giờ bạn có thể có nhiều cảnh báo của ngữ cảnh, điều này sẽ hoạt động độc lập và không ảnh hưởng lẫn nhau. Nó còn được gọi là ngữ cảnh reentrant.

+0

Vì vậy, bạn đang nói toàn bộ [biến toàn cầu] (http: //en.wikipedia. org/wiki/Global_variable) khái niệm chỉ đơn giản là không tồn tại trong C# và nếu có cái gì đó sao chép nó hành vi trong C# (như singletons) nó nên ** không bao giờ ** được sử dụng? Nếu đó là nó, bạn có thể cung cấp một ví dụ để lưu một giá trị cấu hình cho một hằng số sẽ giống nhau thông qua toàn bộ ứng dụng? Giả sử tôi chỉ muốn có một cấu hình cho phiên bản ứng dụng và trang web của công ty. Và một loại thứ ba của var toàn cầu không liên tục, ngôn ngữ ứng dụng hiện tại. – cregox

+0

Có, chúng tồn tại và tùy thuộc vào bạn để kiểm soát chúng hoặc giới hạn phạm vi của chúng. Phiên bản ứng dụng và trang web của công ty có vẻ như _metadata_ chỉ nên được đưa vào _assembly_ (với thuộc tính assembly); ngôn ngữ ứng dụng có thể phụ thuộc vào người dùng hiện đang đăng nhập, vì vậy nó có thể liên quan đến một _request_ hoặc một phạm vi _session_. Bạn nhận được hình ảnh ... –

+0

Vâng, không ai trong số đó nghe như var toàn cầu với tôi - nhưng tất cả họ dường như hành động như một. Tôi nghĩ rằng tôi đã nắm bắt nó ... – cregox

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