Altbilgi içeriğine atla
Iron Academy Logo
C# Öğrenin
C# Öğrenin

Diğer Kategoriler

C# Set Flag Enum Anlama: Bayrak Atama

Tim Corey
9m 57s

C#'da izinler, yapılandırmalar veya ayarlarla çalışırken, genellikle bir değişkene birden fazla değerin saklanması gereken durumlarla karşılaşıyoruz. Her ayar için ayrı Boolean değerleri kullanmak yerine, Bayrak Enumları kullanabiliriz. Bu yöntem, tek bir tamsayı değerinde birden çok seçeneği verimli bir şekilde yönetmek için ikili işlemlerden yararlanır.

Bu makalede, Tim Corey'nin Binary in C#: Assigning Flags in 10 Minutes or Less videosuna dayalı olarak C#'da Bayrak Enumlarını nasıl ayarlayacağımıza daha yakından bakacağız. Tim, ikili işlemler kullanarak birden çok değeri atamanın kodumuzu nasıl daha verimli ve okunabilir hale getirdiğine dair bir geçit sağlıyor. Haydi inceleyelim.

Bayrak Enumlarına Giriş

Tim, bu dersin C#'da ikili anlamayı anlamaya yönelik bir serinin parçası olduğunu açıklayarak başlıyor. Bu özel videoda, bayrakların ikili işlemler kullanılarak nasıl atanacağına odaklanıyor. Bayraklar, birden çok değeri tek bir tamsayıda saklamamıza izin verir ve izin yönetimini çok daha basit ve verimli hale getirir.

Bitwise OR ile Birden Çok Bayrak Atama

Tim, birden çok bayrağı birleştirmek için bitwise OR (|) operatörünü kullanır. Oluşturduğu SystemPermissions, SQL, Redis ve BuildSystem gibi farklı izin seviyelerini içeren bir numaralandırmadır. Birden çok değişken kullanmak yerine, tüm izinleri tek bir değerde depolayabiliriz.

Bir değişkene birden çok izin atama örneği:

// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;

// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;

// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);

İkili Temsilini Görüntüleme

Neler olduğunu daha iyi anlamak için Tim, tam sayı değerini Convert.ToString(value, 2) kullanarak ikili biçime dönüştürmeyi öneriyor. Bu, hangi bitlerin ayarlandığını görselleştirmemizi sağlar:

// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));

Bu, farklı bit pozisyonlarının farklı izinlere karşılık geldiğini ve bir tamsayıda birden çok ayarın nasıl depolanabileceğini gösterir.

OR-Equals Kullanarak Daha Fazla İzin Ekleme

Tim, |= operatörünü kullanarak izinleri dinamik olarak ekleyebileceğimizi açıklıyor:

// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;

// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;

// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);

32-bit Sınırını Anlama

Tim, önemli bir dikkati çekiyor: C#'daki tamsayı veri türünün 32-bit sınırı vardır. Bu, bir int içinde en fazla 32 benzersiz bayrak saklayabileceğimiz anlamına gelir. Eğer 32'den fazla bayrak gerekiyorsa, bir long (64-bit) veya hatta birden fazla değer kullanmayı düşünmeliyiz. Ancak, çoğu durumda, 32 bayrak yeterinden fazlasıdır.

Bayrakları Bir Veritabanında Depolama

Bayrak enumları kullanmanın en büyük avantajlarından biri, bunların bir veritabanında verimli bir şekilde saklanabilmesidir. Birden çok Boolean sütunu saklamak yerine, tüm izinleri temsil eden tek bir tamsayı değeri saklayabiliriz. Tim, bu yaklaşımın veritabanı karmaşıklığını ve depolama gereksinimlerini önemli ölçüde azalttığını açıklıyor.

Örneğin, eğer TimPermissions 37 olarak saklanmışsa, şu kombinasyonu temsil eder:

  • SQL (bit 1)
  • Redis (bit 3)
  • BuildSystem (bit 5)

Bu değeri veritabanından aldığımızda, aktif izinleri belirlemek için kolayca çözümleyebiliriz.

Sonuç

Tim, Bayrak Enumlarının gücüne vurgu yaparak bitiriyor. İkili işlemler kullanarak, tek bir tamsayı içinde birden çok durumu verimli bir şekilde yönetebiliriz. Bu teknik performansı artırır, veri depolamayı basitleştirir ve kodumuzu daha okunabilir hale getirir.

Bu yaklaşımı takip ederek, C# Bayrak Enumlarını kullanarak temiz, ölçeklenebilir bir izin yönetim sistemi uygulayabilirsiniz. Daha iyi anlamak için tam videoyu izleyin.

Hero Worlddot related to C# Set Flag Enum Anlama: Bayrak Atama
Hero Affiliate related to C# Set Flag Enum Anlama: Bayrak Atama

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js üzerinde çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara