2012-01-04 78 views
5

Tôi không thể tìm thấy bất kỳ thông tin nào liên quan đến câu hỏi này. Tôi đang cố gắng tạo ra một mảng toàn cầu trong C# để tôi có thể nhập thông tin vào nó tại các điểm khác nhau trong mã của tôi và sau đó gọi lại thông tin sau đó để hiển thị nó. Ví dụ, tôi muốn để có những thông tin sau và đặt nó vào mảng:Khai báo và sử dụng mảng toàn cục C#

string auctionID; 
string itemName; 
string itemID; 
string bid; 
string buyout; 
string quantity; 

sau đó tôi muốn để có thể gọi mảng đó với một vòng lặp for, hoặc một cái gì đó tương tự, vì vậy mà tôi có thể hiển thị thông tin mà sau đó. Bây giờ, một điều nhỏ mà tôi quên đề cập đến là tôi có thể sẽ cần một mảng mảng hoặc mảng đa chiều. Lý do cho điều này là bởi vì tôi sẽ có rất nhiều phiên đấu giá khác nhau và dữ liệu về mỗi phiên đấu giá (do đó các biến ở trên) và tôi muốn hiển thị thông tin đó vào cuối chương trình. Cảm ơn bạn đã dành thời gian!

Cập nhật 1

Vì vậy, tôi nghĩ rằng tôi không làm cho bản thân mình rõ ràng bởi vì tôi đang bối rối, nhưng điều đó cũng có thể là bởi vì tôi là một chút thất vọng tại thời điểm với chương trình này. Tôi muốn để có thể tạo ra một mảng toàn cầu và sau đó nhận được & thiết lập thông tin được lưu trữ trong mảng đó với các chức năng khác nhau trong chương trình của tôi như các chức năng khác nhau sẽ được sửa đổi các phần khác nhau của mảng đó. Ngoài ra, tôi sẽ không nhớ sử dụng bộ nhớ đệm, nếu tôi hiểu làm thế nào mà làm việc hoặc thậm chí có một liên kết để đọc về nó. Một điều cuối cùng để thêm vào, tôi đang làm điều này trên Windows Phone 7, vì vậy tôi bị hạn chế về các thư viện và các cuộc gọi hệ thống mà tôi có thể sử dụng.

Cập nhật 2

tôi khá một chút gỉ trên OOP, vì vậy tôi sẽ đi đọc lên nhiều hơn về nó (nhờ xử lý một tấn với HTML và không thực sự có một cơ hội để làm chương trình thực). Cảm ơn lời đề nghị của mọi người. Tôi có lẽ sẽ đăng lại chủ đề này nếu tôi không thể tìm ra một điều gì đó xa hơn. Chúc mừng!

+1

Không, đừng làm vậy. Chúng tôi không sử dụng mảng toàn cầu những ngày này. – Richard

+0

Sử dụng bộ nhớ đệm sẽ là một ý tưởng tốt hơn so với mảng toàn cầu, vì bạn có khả năng chạy vào các vấn đề đồng thời và đa luồng. – Kane

+0

"Tôi không biết làm thế nào để gọi cùng một mảng mỗi khi tôi thực hiện cuộc gọi riêng biệt cho mảng bởi vì, từ những gì tôi hiểu, C# xử lý mảng như đối tượng." Điều đó không có ý nghĩa gì cả. Tại sao bạn nghĩ rằng mảng là đối tượng có nghĩa là bạn sẽ không nhận được "cùng một mảng mỗi lần"? –

Trả lời

7

biến toàn cầu hầu như luôn luôn là một ý tưởng tồi, do đó, C# làm cho việc tạo cho họ một điều khó khăn để làm. Tuy nhiên, nếu bạn thực sự muốn, bạn có thể làm một cái gì đó như thế này:

public static class GlobalData 
{ 
    public static string[] Foo = new string[16]; 
}; 

// From anywhere in your code... 
Console.WriteLine(GlobalData.Foo[7]); 

Lưu ý, tuy nhiên, miễn là bạn buộc phải tạo ra một lớp tĩnh để làm điều này, tại sao không đi trước và làm cho thực tế biến mảng riêng tư, thay vì công khai, sau đó thêm phương thức tĩnh, công khai và phương thức setter? Cách tiếp cận đó ít nhất loại bỏ một số mối nguy hiểm vốn có trong các biến toàn cầu.

1
string[] values; 

Hoặc để tuyên bố một trong một thời gian cụ thể:

string[] values = new string[6]; // creates an array with a length of 6. 
+0

Ồ, tôi hiểu điều đó. Vấn đề là tôi không biết phải làm gì để đặt nó ở đâu để các phương thức khác nhau có thể gọi mảng đó và sử dụng thông tin bên trong nó. – th3n3wguy

+0

Về mặt kỹ thuật, nhưng không thực sự trả lời câu hỏi IMHO. –

+0

@thenewguy Vui lòng đọc thêm về lập trình hướng đối tượng và các mẫu thiết kế. Bạn vẫn đang suy nghĩ theo cách không OOP. –

2

Vâng, ngoài từ thực tế là bạn có thể có một vấn đề về cấu trúc nếu bạn đang lưu trữ những thứ trên toàn cầu.

Bạn có thể sử dụng thuộc tính tĩnh cho mục này.

public class MyVariables 
{ 
    private static string[] _MyStuff 
    public static string[] MyStuff 
    { 
      return _MyStuff; 
    } 
} 

Sau đó truy cập vào nó như thế này:

MyVariables.MyStuff[0] 
+0

Bạn cũng có thể khai báo lớp đó là static ('public static class MyVariables'), mặc dù điều này không quan trọng lắm - nó sẽ chỉ ngăn người dùng vô hiệu hóa instantiating một đối tượng. – MusiGenesis

4

Trong C# không có các biến toàn cục. Chỉ có các thành viên lớp học. Cách tốt nhất để truyền dữ liệu từ một phần của ứng dụng của bạn sang ứng dụng khác là chuyển một tham chiếu đến một đối tượng (một cá thể của một lớp) chứa tất cả dữ liệu có liên quan trong các thành viên của nó. Bạn cũng có thể sử dụng các lớp tĩnh, hoạt động giống như các biến toàn cầu, nhưng khi bạn quen thuộc hơn với lập trình hướng đối tượng, bạn sẽ nhận ra rằng đây không phải là cách tốt để xử lý dữ liệu.

2

Tôi muốn sử dụng Danh sách chung như một Danh sách vì bạn không phải lo lắng về kích thước và bạn có thể nhận được trình lặp cho nó trong vòng lặp foreach.

List<string> values = new List<string>(); 

để chèn một mục:

values.Add("item"); 

để loại bỏ:

values.Remove("item"); 

Nếu bạn muốn đa chiều sau đó sử dụng:

List<List<string>> multi_dimens_values; 
1

Tôi nghĩ Dictionary<string, string> sẽ thoải mái hơn... Bạn có thể lặp qua nó và truy cập một mục cụ thể. Và cũng vượt qua nó để phương pháp của bạn.

1

đây là một ý tưởng rất tồi.

  1. tránh biến toàn cầu càng nhiều càng tốt. có vài trường hợp bạn cần một singleton công cộng, có thể thay đổi được.
  2. sử dụng đối tượng rõ ràng (POCO) thay vì mảng đa chiều. xem bên dưới để biết ví dụ
  3. thay vì tạo/lưu/tải các đối tượng từ bộ nhớ nếu cần.

    lớp Đấu giá { dài công khai Id {get; set;} chuỗi công khai ItemName {get; set;} ... }

9

Tôi không khuyên bạn nên sử dụng mảng toàn cầu, chứ không phải là một thực hành tốt nhất những gì bạn cần là một kho lưu trữ dữ liệu và lấy từ đó các dữ liệu bạn muốn sử dụng , về cấu trúc bạn muốn sử dụng, tôi khuyên bạn nên làm điều gì đó như sau:

public class Auction 
{ 
      public string auctionID {get; set;} 
      public string itemName {get; set;} 
      public string itemID {get; set;} 
      public string bid {get; set;} 
      public string buyout {get; set;} 
      public int quantity {get; set;} 
} 

Và sau đó sử dụng Danh sách đối tượng cụ thể đó để truy cập dữ liệu của bạn.

List<Auction> acutions = new List<Auction>(); 

Sau đó, bạn có thể thêm hoặc xóa các mục như mong muốn.

auctions.Add(auction object); 
auctions.remove(auction object); 

Hoặc di chuyển qua danh sách với một vòng lặp foreach

foreach (Auction item in auctions) 
{ 
// your code to handle items here 
} 
Các vấn đề liên quan