[Bayraklar] Numaralama Özniteliği C ne anlama geliyor#?
Zaman zaman aşağıdaki gibi bir sıralama görüyorum
[Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
[Flags]
-öznitelik ne yaptığını anlamıyorum.
Herkes iyi bir açıklama ya da yazı olabilir örnek?
CEVAP
Flags özniteliği sayısız bayrak koleksiyonu, yerine tek bir değeri temsil eder zaman kullanılmalıdır. Bu koleksiyonlar genellikle bit operatörleri, örneğin kullanarak manipüle
myProperties.AllowedColors = MyColor.Red | MyColor.Green | MyColor.Blue;
Kendisi tarafından [Flags]
bunu değiştirmez unutmayınhiç- tüm yapar .ToString()
yöntemi ile güzel bir gösterimini etkinleştirin
enum Suits { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }
[Flags] enum SuitsFlags { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }
...
var str1 = (Suits.Spades | Suits.Diamonds).ToString();
// "5"
var str2 = (SuitsFlags.Spades | SuitsFlags.Diamonds).ToString();
// "Spades, Diamonds"
Ayrıca önemli [Flags]
dikkat etmek önemlidirdeğilotomatik olarak iki numaralandırma değerleri güçler olun. Eğer sayısal değerler atlarsanız, varsayılan olarak bir numaralandırma değerleri ve artış 0 ile başlar çünkü bit işlemleri beklemek gibi çalışmaz.
Yanlış beyan:
[Flags]
public enum MyColors
{
Yellow,
Green,
Red,
Blue
}
Eğer bu şekilde ilan ederse, Sarı olacak değerleri, = 0, = 1, Kırmızı = 2, Mavi = 3 Yeşil. Bu işe yaramaz bir bayrak olarak kullanmak için işlerler.
İşte doğru bir tanımlaması örneği:
[Flags]
public enum MyColors
{
Yellow = 1,
Green = 2,
Red = 4,
Blue = 8
}
Sen farklı değerleri bir özellik almak için bunu yapabilirsiniz
if((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
// Yellow has been set...
}
if((myProperties.AllowedColors & MyColor.Green) == MyColor.Green)
{
// Green has been set...
}
ya da, içinde .NET 4 ve daha sonra,
if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
// Yellow has been set...
}
Yorganın altında
Bu daha önce size numaralandırma iki güç kullanıldığı için çalışır. Bu örtülerin altına böyle bir numaralandırma değerleri görünüyor (1 veya 0'ın hangi 8 bit olan bayt olarak sunulmuştur)
Yellow: 00000001
Green: 00000010
Red: 00000100
Blue: 00001000
İşletmenizi kurduktan sonra aynı şekildeAllowedColorsKırmızı, Yeşil ve Mavi VEYA boru | tarafından çiğnenmiş değerleri),AllowedColorsbu gibi görünüyor
myProperties.AllowedColors: 00001110
Çok değer almasını aslında bit VE değerleri saptandı
myProperties.AllowedColors: 00001110
MyColor.Green: 00000010
-----------------------
00000010 // Hey, this is the same as MyColor.Green!
Yok = 0 değeri
Ve ilgili numaralandırma 0 Web sitesini ziyaret alıntı kullanın:
[Flags]
public enum MyColors
{
None = 0,
....
}
Sıfır olan bayrak numaralandırılmış sabit adı olarak kullanım Yok.Sonuç her zaman sıfır olamaz çünkü bir bayrak için Hiçbiri sabit VE test etmek için bir bit işlemi numaralandırılmış kullanın.Ancak, sayısal değer arasında mantıksal bir bit değil, bir karşılaştırma yapabilir ve Hiçbiri sayısal değer herhangi bir biti ayarlanmış olup olmadığını belirlemek için numaralandırılmış sabit.
Flags özniteliği ve msdn designing flags at msdn kullanımı hakkında daha fazla bilgi bulabilirsiniz
Referans bu sembol, PHP Ne anlama geli...
O(log n) tam olarak ne anlama geliyor?...
C 11 standart bellek modelini tanıttı....
Referans - bu hata PHP Ne anlama geliy...
Şifre türü form-data/='parçalı�...