2010-05-12 33 views
8

thể trùng lặp:
Int128 in .Net?C# Kiểu dữ liệu tùy chỉnh!

Sau khi tôi quyết định thực hiện Int128 của tôi trong C#, tôi nghĩ rằng nó sẽ được tốt đẹp để làm cho nó trông giống như các kiểu dữ liệu DotNet khác .. Nhưng tôi có thể không thực hiện các tính năng sau đây:

  • hậu tố khởi tạo: như 13L và 0.2D

Tôi có thể tạo hậu tố của riêng mình trong C# không?
Và nếu tôi không thể .. làm thế nào tôi có thể khởi tạo nó?
tức là

Int128 a= ?? 
+0

xem bài đăng này http://stackoverflow.com/questions/227731/int128-in-net –

Trả lời

8

Bạn không thể tạo trình khởi tạo hậu tố của riêng mình - đây là một phần của ngôn ngữ và được đưa vào trình biên dịch. Nếu bạn viết trình biên dịch C# của riêng bạn, mặt khác, bạn có thể làm bất cứ điều gì bạn muốn và mở rộng nó theo bất cứ cách nào bạn muốn.

Về cách bạn sẽ khởi chạy - điều đó tùy thuộc vào cách bạn đã viết. Nếu đó là một lớp, bạn sẽ cần phải khởi tạo nó bằng từ khóa new hoặc viết một số chuyển đổi tiềm ẩn cho các loại số có độ chính xác thấp hơn.

Như Jon đã lưu ý, bạn sẽ không có cách nào để đặt nó thành giá trị lớn hơn ulong.MaxValue mà không cần thao tác chuỗi. Bạn cũng sẽ phải đại diện trong nội bộ trong một số hình thức (chuỗi? Một số ulongs?) Và chắc chắn rằng tất cả các chuyển đổi và hoạt động hoạt động chính xác (những gì về tràn?).

17

Không, bạn không thể tạo hình thức riêng của bạn về chữ trong C#.

Bạn thể có một chuyển đổi ngầm từ int, long, uintulong, cho phép:

Int128 a = 100; 

nhưng bạn sẽ không thể để xác định giá trị lớn hơn ulong.MaxValue theo cách đó.

Có chuyển đổi ẩn từ decimal sẽ cho phép phạm vi rộng hơn, nhưng sẽ là một ý tưởng tồi vì bạn sẽ mất dữ liệu cho bất kỳ giá trị nào không chỉ là số nguyên.

Về cơ bản, không có gì cho phép giá trị được đảm bảo bằng số nguyên lớn hơn ulong.MaxValue - bạn có thể phân tích chuỗi, nhưng điều đó không thực sự lý tưởng. Ngoài ra, bạn có thể tạo một hàm tạo có số hai số ulong, một cho 64 bit dưới cùng và một cho 64 bit trên cùng.

1

Không, bạn không thể khởi tạo hậu tố. Đó là chút dễ thương sẽ có sẵn trong tiêu chuẩn C++ sắp tới ... nhưng tôi digress.

Lựa chọn rõ ràng nhất là Int128(long hi, ulong lo)Int128(string).

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