IRONSOFTWAREHOME

C# Bayraklarını Anlama

C#'da İkili: 10 Dakikadan Kısa Sürede Bayraklar

Tim Corey

8m 32s

C# Bayrakları, geliştiricilerin izinleri ve seçenekleri bitwise işlemlerle yönetmesini sağlayan güçlü ama genellikle göz ardı edilen bir özelliktir. Binary in C#: Flags in 10 minutes or less" adlı videosunda Tim Corey, bayrakların nasıl çalıştığını ve C#'ta nasıl etkili bir şekilde kullanılabileceklerini net ve öz bir şekilde açıklar. Bu makalede, Tim'in videodaki açıklamalarını ve içgörülerini analiz ederek C# Bayrakları hakkında daha iyi bir anlayış kazanacağız.

Bayraklar Nedir?

Tim, Bayraklar kavramını tanıtarak başlar. Bayrakların, bir değişkende birden fazla değeri atamamıza izin verdiğini ve onların bir uygulamada izinleri yönetmek için yararlı olduğunu açıklar. Bunu açıklamak için, Tim SQL, WebServer, Redis, Azure, GitHub ve BuildSystem gibi çeşitli izinleri içeren SystemPermissions adında bir enum oluşturur.

Tim, Flags olmadan, tek bir değişkenin aynı anda yalnızca bir izin tutabileceğini vurgular. Örneğin, bir kullanıcıya SystemPermissions.GitHub atamaya çalışırsak, bir dizi kullanmadığımız sürece SystemPermissions.BuildSystem de atayamayız, bu da yönetimi zahmetli hale getirir.

Bayrak Olmadan Sorun

Bu noktada, Tim geleneksel enum atamalarının sınırlamalarını gösterir. İzinleri bir kerede atarsak, daha sonra kontrol etmek bir diziyi dolaşmayı gerektirir, bu verimsizdir ve ölçeklenemez. Bu, Tim'in tanımladığı gibi, birden çok izin yönetmenin bir sıkıntı haline geldiği "çirkin" bir uygulamaya yol açar.

Bayraklar Özelliği Tanıtmak

Bu sorunu çözmek için, Tim bir enumun bit alanı olarak ele alınmasına olanak tanıyan [Flags] özniteliğini tanıtır. Her izne, bitwise kaydırma kullanarak benzersiz bir ikili değer atandığını açıklar.

Artan numaraları (0, 1, 2, 3, vb.) atamak yerine, Tim iki'nin eşitler marasıgın değerlerine atar:

[Flags]
enum SystemPermissions
{
    None = 0,
    SQL = 1 << 0,       // 00000001
    WebServer = 1 << 1, // 00000010
    Redis = 1 << 2,     // 00000100
    Azure = 1 << 3,     // 00001000
    GitHub = 1 << 4,    // 00010000
    BuildSystem = 1 << 5 // 00100000
}

Tim, bitlerin kaydırılmasının, her iznin çakışma olmadan benzersiz bir değere sahip olmasını sağlarken, birden çok iznin verimli bir şekilde birleştirilmesine izin verdiğini açıklar.

Bayrakları Atama ve Birleştirme

Tim, ardından, bayrakları atama ve birleştirme işlemlerini bitwise işlemlerle nasıl yapılacağını gösterir. Bir kullanıcıya birden fazla izin atamak için bitimlik OR (`|) operatörü:

SystemPermissions timsPermissions = SystemPermissions.SQL | SystemPermissions.Redis | SystemPermissions.GitHub;

Bu, SQL, Redis ve GitHub izinlerini timsPermissions'a atar ve bit işlemleri kullanarak bunları tek bir değişkende depolar.

Bayraklarla İzinleri Kontrol Etmek

Flags'ın ana avantajlarından biri, belirli bir iznin ayarlanıp ayarlanmadığını bitwise AND (&) operatörünü kullanarak kontrol etme yeteneğidir. Tim, bir kullanıcının belirli bir izne sahip olup olmadığını nasıl doğrulayacağınızı gösteriyor:

if ((timsPermissions & SystemPermissions.SQL) == SystemPermissions.SQL)
{
    Console.WriteLine("Tim has SQL access.");
}

Tim, bunun dizi üzerinden döngü oluşturmaktan çok daha verimli bir yaklaşım olduğunu vurguluyor, çünkü hızlı bit düzeyinde karşılaştırmalara olanak tanır.

İzinleri Kaldırma

Tim ayrıca bir izni bitwise AND ve NOT (~) operatörünü kullanarak nasıl kaldırılacağını da kapsar. SQL iznini timsPermissions'tan kaldırmamız gerekirse, bunu şu şekilde yaparız:

timsPermissions &= ~SystemPermissions.SQL;

Bu, diğer izinleri korurken SQL iznini etkili bir şekilde kaldırır.

Bayrakları İkili Sistem Olarak Görüntüleme

Bayrakların nasıl çalıştığını görselleştirmek için Tim, enum değerini ikili reprezentasyonuna dönüştürmeyi öneriyor. Bir iznin ikili değerini göstermek için bir yardımcı yöntem kullanır:

Console.WriteLine(Convert.ToString((int)timsPermissions, 2));

Tim, bunun enum içindeki bireysel bitlerin nasıl ayarlandığını ve manipüle edildiğini anlamaya yardımcı olduğunu açıklar.

Neden Bayrakları Kullanmalısınız?

Tim, C# dilinde Neden Bayrakların (Flags) Kullanışlı Olduğunu Vurgulayarak Sonuçlandırıyor:

Bir değişkende birden fazla değeri depolamaya izin verirler. Verimli izin yönetimini sağlarlar.

  • Bit işlemleri kullanarak izinleri kontrol etmeyi ve değiştirmeyi basitleştirirler.

Bayrakların dosya izinleri, kullanıcı rolleri ve uygulama ayarları gibi senaryolarda yaygın olarak kullanıldığını da belirtir.

Son Düşünceler

Video boyunca, Tim Corey C# Flags'in nasıl çalıştığını açık ve pratik bir şekilde gösteriyor. [Flags] özniteliği ve bit işlemlerini kullanarak, karmaşık veri yapıları gerekmeden birden fazla izni etkili bir şekilde yönetebiliriz. Birden fazla değer gerektiren izinler veya ayarlarla çalışıyorsanız, Flags, uygulamanızı basitleştirmek için mükemmel bir araçtır.

Pratik bir anlayış için, Tim Corey'nin bu videosuna göz atın, burada bu kavramları adım adım açıklıyor. Bayraklar ilk başta karmaşık görünebilir, ancak ikili doğalarını anladıktan sonra C# geliştirmede inanılmaz derecede kullanışlı bir özellik haline gelirler.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez