2009-06-12 38 views
13

Tôi có cấu trúc đơn giản chứa hai trường; một cửa hàng một đối tượng và một cửa hàng một DateTime. Tôi đã làm điều này bởi vì tôi muốn lưu trữ các đối tượng trong một từ điển nhưng với một tem DateTime là tốt.Cấu trúc gọn gàng so với lớp

Tôi đã có một phương thức trả về cấu trúc của mình và bây giờ tôi đã quyết định phương thức cũng có thể trả về giá trị rỗng, vì vậy tôi đã tạo cấu trúc rỗng của mình. Bây giờ tôi tự hỏi liệu tôi có nên tạo cấu trúc cho lớp của mình để nó là một kiểu tham chiếu không?

Trả lời

10

Trong trường hợp này, có, nó có thể rõ ràng hơn để làm cho cấu trúc của bạn thành một lớp.

Theo như lý giải, bạn chủ yếu tạo một chuyên ngành Tuple. Thật thú vị khi lưu ý rằng các nhà thiết kế thư viện đã chọn làm cho lớp .Net 4 Tuple thay vì cấu trúc. (Trang đó là người tạo tuple và liên kết đến các lớp thể hiện khác nhau)

+3

"Tuple as a class" có thể là chủ yếu để giữ cho mọi thứ nhất quán khi bạn đến Tuple <,,,,,,,> (8 args) - mà chắc chắn sẽ quá lớn như một cấu trúc - đặc biệt nếu bất kỳ T nào là không tầm thường. –

+0

@Marc: Đó là một điểm tốt. Tôi đã không nhận thấy cho đến bây giờ rằng các Tuples là bất biến. –

6

Hoặc là tốt, trong thực tế (miễn là struct là không thay đổi). A DateTime và một tham chiếu không đủ để làm cho nó quá khổ.

Tôi giả sử bạn đang sử dụng nó làm giá trị (không phải là khóa) trong từ điển? Nếu được sử dụng làm khóa bạn cần ghi đè EqualsGetHashCode(), bất kể structclass.

+0

Đúng, đang sử dụng nó làm giá trị, không quan trọng, vì vậy sẽ ghi đè những phương pháp đó. – Charlie

+1

(có lẽ tôi đã không cụm từ nó tốt ... những phương pháp chỉ quan trọng [trong bối cảnh này] khi được sử dụng như là một chìa khóa) –

+0

Vâng, tôi hiểu - không cần thiết cho tôi. Bạn có nghĩa là nếu bạn đang sử dụng lớp như là một chìa khóa, như một người nào đó giải thích tại một trong những câu trả lời ở đây http://stackoverflow.com/questions/689940/hashtable-with-multidimensional-key-in-c – Charlie

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