[Flags]
যখনই গণনীয় বরং একটি একক মান চেয়ে সম্ভাব্য মান একটি সংগ্রহ প্রতিনিধিত্ব করে অ্যাট্রিবিউট ব্যবহার করা উচিত। এই জাতীয় সংগ্রহগুলি প্রায়শই বিটওয়াইড অপারেটরগুলির সাথে ব্যবহৃত হয়, উদাহরণস্বরূপ:
var allowedColors = MyColor.Red | MyColor.Green | MyColor.Blue;
নোট করুন যে [Flags]
গুণটি এটিকে নিজেই সক্ষম করে না - এটির দ্বারা সমস্ত কিছুই .ToString()
পদ্ধতি দ্বারা একটি সুন্দর উপস্থাপনা মঞ্জুরি দেয় :
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"
এটি লক্ষ করাও গুরুত্বপূর্ণ যে এটি এনামকে দু'টির মানকে স্বয়ংক্রিয়ভাবে তৈরি [Flags]
করে না । আপনি যদি সংখ্যাসূচক মানগুলি বাদ দেন তবে এনাম বিটওয়াইজ অপারেশনে যেমন প্রত্যাশা করতে পারে তেমনভাবে কাজ করবে না, কারণ ডিফল্টরূপে মান 0 এবং বৃদ্ধি দিয়ে শুরু হয়।
ভুল ঘোষণা:
[Flags]
public enum MyColors
{
Yellow, // 0
Green, // 1
Red, // 2
Blue // 3
}
মানগুলি যদি এইভাবে ঘোষিত হয় তবে এটি হলুদ = 0, সবুজ = 1, লাল = 2, নীল = 3 হবে This এটি পতাকা হিসাবে অকেজো হয়ে যাবে।
এখানে সঠিক ঘোষণার উদাহরণ রয়েছে:
[Flags]
public enum MyColors
{
Yellow = 1,
Green = 2,
Red = 4,
Blue = 8
}
আপনার সম্পত্তির স্বতন্ত্র মানগুলি পুনরুদ্ধার করতে, কেউ এটি করতে পারেন:
if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
// Yellow is allowed...
}
অথবা নেট 4 এর পূর্বে:
if((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
// Yellow is allowed...
}
if((myProperties.AllowedColors & MyColor.Green) == MyColor.Green)
{
// Green is allowed...
}
আবরণের নিচে
এটি কাজ করে কারণ আপনি নিজের গণনায় দু'জনের শক্তি ব্যবহার করেছেন। কভারগুলির নীচে, আপনার অঙ্কের মানগুলি বাইনারি এবং শূন্যগুলিতে এর মতো দেখায়:
Yellow: 00000001
Green: 00000010
Red: 00000100
Blue: 00001000
একইভাবে, আপনি বাইনারি বিটওয়াইস বা অপারেটরটি ব্যবহার করে আপনার সম্পত্তিটিকে মঞ্জুরিপ্রাপ্ত লাল, সবুজ এবং নীল রঙে সেট করার পরে অনুমোদিত মঞ্জুরিদাতাকে এরকম দেখাচ্ছে:|
myProperties.AllowedColors: 00001110
সুতরাং আপনি যখন মানটি পুনরুদ্ধার করবেন তখন আপনি প্রকৃতপক্ষে বিটওয়াইড এবং &
মানগুলিতে সম্পাদন করছেন :
myProperties.AllowedColors: 00001110
MyColor.Green: 00000010
-----------------------
00000010 // Hey, this is the same as MyColor.Green!
কোনটি নয় = 0 মান
এবং 0
এমএসডিএন থেকে উদ্ধৃত করে আপনার গণনার ব্যবহার সম্পর্কিত :
[Flags]
public enum MyColors
{
None = 0,
....
}
প্রত্যাশিত গণনা করা ধ্রুবকের নাম হিসাবে কিছুই ব্যবহার করুন যার মান শূন্য। আপনি পতাকাটির পরীক্ষার জন্য কিছুটা গণনা করা ধ্রুবককে বিটওয়াস এবং অপারেশনে ব্যবহার করতে পারবেন না কারণ ফলাফল সর্বদা শূন্য থাকে। তবে, আপনি সংখ্যাসূচক মান এবং কোনও বিট সেট আছে কিনা তা নির্ধারণের জন্য সংখ্যাসূচক মান এবং কোনওটি গণনা করা ধ্রুবকের মধ্যে তুলনা করে কিছুটা লজিক্যাল সম্পাদন করতে পারেন।
আপনি আরও পতাকা অ্যাট্রিবিউট সম্পর্কে এবং তথ্য তার ব্যবহার জানতে পারেন MSDN এবং MSDN এ পতাকা নকশা