2010-02-17 6 views
6

Điều này có vẻ cơ bản nhưng Im thấy điều này khá tầm thường. Chỉ cần làm cách nào bạn khuyên bạn nên đặt biến toàn cục với một lớp tĩnh (tức là ứng dụng giao diện điều khiển)?Biến toàn cầu theo phương pháp tĩnh

Để cung cấp cho bạn nhiều nền hơn, phương pháp chính là gọi một số trình tạo sự kiện tùy chỉnh mà tôi hy vọng nhận/thiết lập các biến.

Bất kỳ ý tưởng hoặc đề xuất nào bạn có đều được đánh giá cao.

+9

Cá nhân tôi khuyên bạn nên xóa cụm từ "biến toàn cục" khỏi từ vựng của bạn. – Aaronaught

+6

để tham khảo trong tương lai, điều gì đó tầm thường, là điều bạn thấy đơn giản. – NerdFury

Trả lời

9

đơn giản nhất cách là

public static Object MyGlobalVariable; 

mà tạo ra một lĩnh vực public static. Tốt hơn một chút là:

public static Object MyGlobalVariable { get; set; } 

Tạo tài sản tĩnh công khai.

+1

Tại sao tài sản này tốt hơn một chút? – IllidanS4

+0

@ IllidanS4, stackoverflow.com/questions/653536/difference-between-property-and-field-in-c-sharp-3-0/653799 –

+0

Tôi biết sự khác biệt, nhưng là tính chất tĩnh khách quan tốt hơn so với các lĩnh vực tĩnh? – IllidanS4

1

Không chắc chắn 100% nhưng bạn có thể thử một singleton để giữ các biến của bạn. Nếu không biết những gì bạn đang cố gắng để thực hiện thật khó để đề nghị nếu giải pháp này sẽ không cắn bạn xuống đường.

http://www.yoda.arachsys.com/csharp/singleton.html

13

Không có biến toàn cục nào trong C#. Một biến luôn luôn là phạm vi cục bộ. Đơn vị cơ bản của mã là lớp và trong lớp bạn có các trường, phương thức và thuộc tính.

Bạn có thể bắt chước "biến toàn cục" bằng cách tạo trường hoặc thuộc tính tĩnh công khai trong một số lớp, nhưng bạn không nên. C# làm cho điều này trở nên khó khăn vì một lý do rất tốt; các biến toàn cục là tà ác thuần túy. Họ vi phạm một số nguyên tắc tốt của thiết kế OO - đóng gói, khớp nối lỏng lẻo, và sự gắn kết cao, để đặt tên chỉ là một vài.

Tôi nhận ra đây là câu hỏi dành cho người mới bắt đầu, nhưng tôi nghĩ rằng đó là đây là câu hỏi dành cho người mới bắt đầu nên rất quan trọng khi nói điều này. Bây giờ là thời điểm tốt nhất để bắt đầu học những chiến thuật nào đang được khuyến khích hoặc thậm chí nguy hiểm trong C#, và sử dụng một trường tĩnh/thuộc tính như một biến toàn cầu là khoảng sáu trong số chúng. Có những cách sử dụng hợp pháp cho những cấu trúc này, nhưng việc truyền dữ liệu từ nơi này sang nơi khác không phải là một trong số chúng.

Nếu hai lớp khác nhau phụ thuộc vào cùng một thông tin, thì chuyển thông tin từ nguồn đến đích. Điều này thường được thực hiện thông qua constructor hoặc như một đối số cho phương thức được gọi. Bạn nên luôn luôn có một và chỉ một ví dụ thực sự "sở hữu" thông tin này; làm cho thông tin "toàn cầu" có nghĩa là bạn không thể lý luận về ai hoặc những gì có thể tùy thuộc vào nó tại bất kỳ thời điểm nào.

Hãy xem xét điều này và cố gắng suy nghĩ về các cách khác bạn có thể chia sẻ thông tin mà bạn muốn lưu trữ trong biến toàn cục (tức là cung cấp nó làm đối số cho hàm tạo hoặc phương thức). Nếu bạn không chắc chắn, hãy đăng một ví dụ về những gì bạn đang cố gắng làm và chúng tôi sẽ giúp bạn.

+0

Cảm ơn bạn đã xây dựng .. điều đó rất hữu ích. –

+0

Giả sử tôi có một vài chuỗi chạy đồng thời và rời khỏi chuỗi chính và bây giờ khi có sự cố trong một trong các luồng đó, tôi muốn tăng số lượng lỗi. Làm thế nào điều này sẽ được thực hiện sau đó? – user20358

+0

@ user20358: Đó không thực sự là đủ thông tin để đề xuất giải pháp. Chủ đề đang làm gì? Tại sao họ thất bại? Hậu quả của thất bại là gì? Điểm chính xác của * đếm * là gì, trái ngược với việc ghi lại chúng hoặc thực hiện một số hành động tiếp theo? Bạn nên làm rõ vấn đề của mình và đặt một câu hỏi mới. – Aaronaught