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!

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.
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.
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.
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
}<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
End EnumTim, 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.
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;Dim timsPermissions As SystemPermissions = SystemPermissions.SQL Or SystemPermissions.Redis Or SystemPermissions.GitHubBu, SQL, Redis ve GitHub izinlerini timsPermissions'a atar ve bit işlemleri kullanarak bunları tek bir değişkende depolar.
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.");
}If (timsPermissions And SystemPermissions.SQL) = SystemPermissions.SQL Then
Console.WriteLine("Tim has SQL access.")
End IfTim, 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.
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;timsPermissions = timsPermissions And Not SystemPermissions.SQLBu, diğer izinleri korurken SQL iznini etkili bir şekilde kaldırır.
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));Console.WriteLine(Convert.ToString(CInt(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.
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.
Bayrakların dosya izinleri, kullanıcı rolleri ve uygulama ayarları gibi senaryolarda yaygın olarak kullanıldığını da belirtir.
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.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy