Tôi đã thực hiện một số đọc trên enums và thấy chúng rất giống với việc khai báo hằng số. Làm thế nào tôi biết khi nào sử dụng một hằng số thay vì một enum hoặc ngược lại. Một số lợi ích của việc sử dụng enum là gì?
Tôi đã thực hiện một số đọc trên enums và thấy chúng rất giống với việc khai báo hằng số. Làm thế nào tôi biết khi nào sử dụng một hằng số thay vì một enum hoặc ngược lại. Một số lợi ích của việc sử dụng enum là gì?
Câu trả lời:
Sử dụng enum khi bạn muốn xác định một phạm vi giá trị mà một thứ có thể là. Màu sắc là một ví dụ rõ ràng như:
public enum Colour
{
White,
Red,
Blue
}
Hoặc có thể là một tập hợp những thứ có thể có như: (Ví dụ tôi đã ăn cắp từ đây vì tôi lười biếng)
[FlagsAttribute]
enum DistributedChannel
{
None = 0,
Transacted = 1,
Queued = 2,
Encrypted = 4,
Persisted = 16,
FaultTolerant = Transacted | Queued | Persisted
}
Các hằng số phải dành cho một giá trị duy nhất, như PI. Không có phạm vi giá trị PI, chỉ có PI.
Các điểm khác cần xem xét là:
Type Safety"
Điều còn thiếu trong các câu trả lời khác là enum có kiểu cơ sở số nguyên. Bạn có thể thay đổi mặc định từ int thành bất kỳ kiểu tích phân nào khác ngoại trừ ký tự như:
enum LongEnum : long {
foo,
bar,
}
Bạn có thể ép kiểu rõ ràng từ và ngầm định sang kiểu cơ sở, điều này rất hữu ích trong các câu lệnh switch. Hãy lưu ý rằng người ta có thể chuyển bất kỳ giá trị nào của kiểu cơ sở sang một enum, ngay cả khi enum không có thành viên nào có giá trị thích hợp. Vì vậy, sử dụng luôn phần mặc định trong công tắc là một ý kiến hay. Bản thân BTW, .NET cho phép các enum có giá trị dấu phẩy động, nhưng bạn không thể định nghĩa chúng trong C #, mặc dù tôi nghĩ bạn vẫn có thể sử dụng chúng (ngoại trừ trong switch).
Hơn nữa, sử dụng enums mang lại cho bạn sự an toàn hơn về kiểu chữ. Nếu bạn định sử dụng hằng số int như tham số phương thức, thì tôi có thể gọi phương thức với bất kỳ giá trị int nào. Đúng, thông qua truyền, nó cũng có thể xảy ra với enums, nhưng nó sẽ không xảy ra vô tình. Tệ hơn nữa là khả năng nhầm lẫn thứ tự của các tham số.
void method(int a, int b) {...}
Nếu hằng số A chỉ có thể đi vào a và hằng số B chỉ có thể đi vào b, thì việc sử dụng hai kiểu enum khác nhau sẽ phát hiện ra bất kỳ sự lạm dụng nào trong quá trình biên dịch.
Hằng số là một đặc điểm ngôn ngữ nói rằng biến sẽ không thay đổi giá trị (vì vậy trình biên dịch có thể thực hiện tối ưu hóa kiến thức đó) trong đó enum là một kiểu cụ thể.
Hằng có thể là bất kỳ kiểu dữ liệu nào nhưng một enum là một enum.
Tôi sử dụng một enum bất kỳ nơi nào mà bạn có thể có một số tùy chọn và muốn cải thiện khả năng đọc của mã. tức là bạn có thể có các mức theo dõi dưới dạng int với các giá trị 0, 1, 2 hoặc enum dưới dạng lỗi, cảnh báo và thông tin.
Enum cũng có khả năng được sử dụng như các toán tử bitwise, tức là FontStyle.Bold | FontStyle.Italic sẽ cung cấp cho bạn các phông chữ đậm và nghiêng.
Ngoài câu trả lời của Robert:
Sử dụng enum cho một tập hợp hữu hạn các giá trị được đặt tên. Bạn không thực sự quan tâm đến giá trị số đằng sau mỗi ký hiệu (nhưng bạn vẫn có khả năng áp đặt chúng, ví dụ: để tương thích với hệ thống kế thừa).
Robert: Vâng, Enum có thể được sử dụng như các trường bit. Sử dụng thuộc tính Flags (và đảm bảo rằng các thành viên của enum có các giá trị số phù hợp).
Hằng số AC # tương tự như một biến ở chỗ nó đặt tên xác định cho một giá trị. Tuy nhiên, một hằng số khác với một biến tiêu chuẩn vì một khi đã được xác định, giá trị được gán cho hằng số không bao giờ có thể thay đổi được. Lợi ích chính của hằng số là sự hỗ trợ của chúng trong việc tạo mã tự lập tài liệu cũng như cho phép khai báo các giá trị khóa ở một nơi duy nhất, cho phép dễ dàng bảo trì nếu giá trị cần được cập nhật và phần mềm được biên dịch lại.
Trong khi đó, danh sách Enumerator hữu ích cho việc xác định trình tự và trạng thái, đặc biệt khi có một diễn tiến tự nhiên qua các trạng thái đó. Điều này là do mỗi hằng số trong danh sách có thể được định dạng và so sánh bằng cách sử dụng tên hoặc giá trị của nó. Một enum cũng có thể được sử dụng để xác định một tập hợp giới hạn các giá trị hợp lệ.
Một điều tôi thấy hữu ích khi sử dụng enum
thay vì const
là bạn có thể lặp lại các giá trị trong một enum
, khó hơn nhiều để làm điều đó với const
các giá trị.