Tại sao là DateTime. Tháng một int?


9

Trong C #, thuộc DateTimetính Monthcó một loại int(số nguyên có chữ ký 32 bit) nhưng phạm vi của nó sẽ chỉ là 1-12. Các lý do nhóm C # đã chọn inttrên một loại số nhỏ hơn, chẳng hạn như byte(số nguyên không dấu 8 bit) là gì?


5
Trừ khi ai đó trong nhóm thiết kế C # đang rình rập, tôi không chắc bạn sẽ nhận được câu trả lời cho điều này ...
Liath

1
gnat

Btw DateTimenhư được triển khai trong CoreFX mã hóa thời gian dưới dạng một giá trị 64 bit. Thông tin như ngày hoặc tháng được trích xuất từ ​​giá trị đó thông qua một số phép toán thông minh ( GetDatePart()). Đây không phải là một lý do để sử dụng một giá trị int làm giá trị trả về, nó chỉ không có nhược điểm . Cũng lưu ý rằng do các vấn đề căn chỉnh, trả về một byte từ một hàm sẽ không hiệu quả hơn trả về một int.
amon

3
Tôi muốn hỏi tại sao nó không phải là một loại được gọi Month.
bdsl

Rất có thể đó là do các hoạt động được thực hiện bên trong yêu cầu một int và các nhà thiết kế trình biên dịch đã quyết định rằng nó không đáng để chuyển đổi nó thành một cái gì đó khác, có lẽ vì lý do hiệu suất.
NoChance

Câu trả lời:


23

intđược sử dụng cho hầu hết tất cả các biến số nguyên trong .NET mặc dù thường thì một loại nhỏ hơn là đủ. Ngoài ra, các loại không dấu hầu như không bao giờ được sử dụng mặc dù chúng có thể.

Một số lý do:

  1. Các loại đã ký và không dấu cũng như các loại số nguyên có kích thước khác nhau có thể gây khó xử khi kết hợp chúng ( +hoặc <ví dụ). Các quy tắc không rõ ràng. Tôi là một nhà phát triển có kinh nghiệm và tôi không thể nói cho bạn biết toàn bộ quy tắc. Tôi không cần biết.
  2. intlà nhanh chóng trên tất cả các kiến ​​trúc phổ biến. Các loại nhỏ hơn thường dẫn đến chuyển đổi có thể chậm hơn.
  3. Hiệu suất không phải là vấn đề đối với 99% mã thông thường. Không cần phải lật đổ điều này. Chỉ cần sử dụng intở mọi nơi.
  4. Khả năng đọc là rất tốt vì ý định là rõ ràng. A bytesẽ đề xuất dữ liệu nhị phân chẳng hạn. (Xem bình luận của Flater.)

Đó là một quy ước hữu ích để sử dụng int.


Cảm ơn, đây là một số lý do tuyệt vời. Tôi chưa bao giờ nghĩ về hàm ý hiệu suất của việc chuyển đổi từ nhỏ sang lớn hoặc không dấu thành ký, vì đó là tất cả ẩn trong mã.
Frayt

Có, tôi thực sự đã tạo mã chậm hơn một lần bằng cách sử dụng byte thay vì ints, chỉ cần sử dụng ints; +)
Joel Harkes

1
Một yếu tố khác có thể là "mọi người thực sự thích int theo mặc định" và các nhà thiết kế muốn không có sự bất ngờ về kiểu không phù hợp.
SD

1
Thêm vào một câu trả lời đầy đủ, khả năng đọc là một lý do khác để sử dụng int. Nếu tôi thấy một bytetài sản, tôi sẽ không tự động nghĩ rằng đó là một giá trị số. Một byte có thể là nhiều thứ (ví dụ: một bộ sưu tập booleans được nén). Đẩy xa hơn một chút, tôi nghi ngờ bất cứ ai sẽ nhìn vào a byte[]và nghĩ rằng "aha, đó phải là một tối ưu hóa List<int>".
Flater

2
Điểm 3 mâu thuẫn với điểm 2 trong câu trả lời này. Có lẽ "điểm 3" tốt hơn sẽ là "Đối với 99% mã thông thường, chi phí bộ nhớ của" tháng là int "so với" tháng là byte "không phải là vấn đề.
Doc Brown

4

Một tháng không phải là một giá trị. Một tháng chỉ là một tháng.

Ánh xạ 1-12 (đáng lẽ là 0-11 imo) chỉ được thực hiện để làm cho việc làm toán với nó dễ dàng hơn.

Và một khi bạn bắt đầu làm toán với nó, bạn phải thực dụng. Ints là mặc định defacto cho toán học số nguyên. Vì vậy, sử dụng những người.

Đó là những gì lập trình viên mong đợi. Không có ngữ cảnh: mong đợi một int.

Bởi vì bạn không quan tâm liệu tháng 1 là 1 (hay 0), bạn quan tâm đến câu trả lời cho các câu hỏi như: "có bao nhiêu lần trả góp hàng tháng cho đến khi tôi trả khoản nợ này". Và sau đó bạn phát hiện ra rằng bạn nên sử dụng số nguyên thay vì byte.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.