CodeBlanks Logo Icon CodeBlanks

Flags attribute

C# kursu · Başlangıç · Ders 104/116

[Flags] ile bit tabanlı kombinasyonlar oluşturmayı öğrenirsin.

[Flags] ile bit alanları

[Flags] özniteliği, bir enum'un bit alanı (bit field) kombinasyonlarını temsil edebilmesini sağlar. Böylece tek bir değişken birden çok değeri aynı anda tutabilir. Dosya izinleri, seçenek bayrakları ya da gün kombinasyonları için idealdir.

Tanımlama: [Flags] enum Perm { Read = 1, Write = 2, Exec = 4 }. Değerlerin ikinin kuvvetleri olmasına dikkat et; böylece her bayrak ayrı bir biti temsil eder ve bitsel işlemlerle birleştirilebilir. [Flags] özniteliği yalnızca ToString çıktısını güzelleştirir; davranışı değiştirmez.

Bitsel OR ile birleştirme

İki ya da daha fazla bayrağı birleştirmek için bitsel OR işleci olan | kullanılır. Sonuç, her bayrağın bitlerini içeren yeni bir değer olur. Bu, tek bir değişkende birden çok izni ya da seçeneği temsil etmenin standart yoludur.

Örnek: Perm p = Perm.Read | Perm.Write; satırı p'ye hem okuma hem yazma iznini atar. (int)p ifadesi 3 verir. [Flags] sayesinde p.ToString() çağrısı "Read, Write" gibi okunaklı bir sonuç döndürür.

HasFlag ile sorgulama

Birleşik bir bayrak değerinde belirli bir bayrağın ayarlı olup olmadığını sorgulamak için HasFlag metodunu kullanırsın. Metot, bool döndürür ve sorgulanan bayrak ayarlıysa true verir.

Örnek: p.HasFlag(Perm.Read) çağrısı, p içinde okuma bayrağı varsa true döner. Alternatif olarak (p & Perm.Read) != 0 ifadesini de kullanabilirsin; bitsel AND ile bayrağın varlığını denetler. İki yöntem de yaygındır.

Uygulama İzinleri birleştir ve yazdır

[Flags] özniteliğiyle Perm adında bir enum tanımla; üyeleri Read = 1, Write = 2, Exec = 4 olsun. Main içinde Perm p = Perm.Read | Perm.Write; biçiminde iki bayrağı birleştir ve (int)p değerini Console.WriteLine ile yazdır.

Örnek çözümü göster
[Flags] enum Perm { Read = 1, Write = 2, Exec = 4 } tanımla, sonra Perm p = Perm.Read | Perm.Write; ve Console.WriteLine((int)p); ekle.
Örnek çözüm:
using System;

[Flags]
enum Perm { Read = 1, Write = 2, Exec = 4 }

class Program
{
    static void Main()
    {
        Perm p = Perm.Read | Perm.Write;
        Console.WriteLine((int)p);
    }
}

Kendini test et

  1. Perm.Read | Perm.Write ne verir?

    [Flags] enum Perm { Read = 1, Write = 2, Exec = 4 }
    • 1
    • 2
    • 3
    • 7
    Cevabı göster

    3 — Doğru! 1 | 2 = 3; bitsel OR değerleri birleştirir.

  2. Bayrakları birleştir

    Perm p = Perm.Read ____ Perm.Write;
    Cevabı göster
    Perm p = Perm.Read | Perm.Write;
  3. İşlemi sonucuyla eşleştir

    Read | Write
    3
    HasFlag(Read)
    true/false
    Read & Write
    0

Başlangıç bölümündeki tüm dersler