Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Petunjuk / Saran
Konten ini adalah kutipan dari eBook, Arsitektur Layanan Mikro .NET untuk Aplikasi .NET Kontainer, tersedia di .NET Docs atau sebagai PDF gratis yang dapat diunduh yang dapat dibaca secara offline.
Enumerasi (atau jenis enum singkatnya) adalah pembungkus bahasa tipis di sekitar jenis integral. Anda mungkin ingin membatasi penggunaannya saat menyimpan satu nilai dari sekumpulan nilai tertutup. Klasifikasi berdasarkan ukuran (kecil, sedang, besar) adalah contoh yang baik. Menggunakan enum untuk aliran kontrol atau abstraksi yang lebih kuat bisa menjadi bau kode. Jenis penggunaan ini mengarah ke kode yang rapuh dengan banyak pernyataan alur kontrol memeriksa nilai enum.
Sebagai gantinya, Anda dapat membuat kelas Enumerasi yang memungkinkan semua fitur kaya dari bahasa berorientasi objek.
Namun, ini bukan topik penting dan dalam banyak kasus, untuk kesederhanaan, Anda masih dapat menggunakan jenis enum reguler jika itu preferensi Anda. Penggunaan kelas enumerasi lebih terkait dengan konsep terkait bisnis.
Menerapkan sebuah kelas dasar Enumerasi
Layanan mikro pemesanan di eShopOnContainers menyediakan contoh implementasi kelas dasar Enumerasi, seperti yang ditunjukkan dalam contoh berikut:
public abstract class Enumeration : IComparable
{
public string Name { get; private set; }
public int Id { get; private set; }
protected Enumeration(int id, string name) => (Id, Name) = (id, name);
public override string ToString() => Name;
public static IEnumerable<T> GetAll<T>() where T : Enumeration =>
typeof(T).GetFields(BindingFlags.Public |
BindingFlags.Static |
BindingFlags.DeclaredOnly)
.Select(f => f.GetValue(null))
.Cast<T>();
public override bool Equals(object obj)
{
if (obj is not Enumeration otherValue)
{
return false;
}
var typeMatches = GetType().Equals(obj.GetType());
var valueMatches = Id.Equals(otherValue.Id);
return typeMatches && valueMatches;
}
public int CompareTo(object other) => Id.CompareTo(((Enumeration)other).Id);
// Other utility methods ...
}
Anda dapat menggunakan kelas ini sebagai jenis dalam entitas atau objek nilai apa pun, seperti untuk CardType
kelas berikut: Enumeration
public class CardType
: Enumeration
{
public static CardType Amex = new(1, nameof(Amex));
public static CardType Visa = new(2, nameof(Visa));
public static CardType MasterCard = new(3, nameof(MasterCard));
public CardType(int id, string name)
: base(id, name)
{
}
}
Sumber daya tambahan
Jimmy Bogard. Kelas enumerasi
https://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/Steve Smith. Alternatif Enum di C#
https://ardalis.com/enum-alternatives-in-cEnumeration.cs. Kelas Enumerasi Dasar di eShopOnContainers
https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/SeedWork/Enumeration.csCardType.cs. Contoh kelas Enumerasi di eShopOnContainers.
https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/AggregatesModel/BuyerAggregate/CardType.csSmartEnum. Ardalis - Kelas untuk membantu menghasilkan enum yang lebih cerdas yang ditik dengan kuat di .NET.
https://www.nuget.org/packages/Ardalis.SmartEnum/