سؤال
هل هناك طريقة لدمج Enums في VB.net؟
المحلول
أعتقد أن ما تريده هو التعداد من نوع العلم.
تحتاج إلى إضافة سمة العلامات إلى الجزء العلوي من التعداد، ومن ثم يمكنك دمج التعدادات مع الكلمة الأساسية "Or".
مثله:
<Flags()> _
Enum CombinationEnums As Integer
HasButton = 1
TitleBar = 2
ReadOnly = 4
ETC = 8
End Enum
ملحوظة: الأرقام الموجودة على اليمين تكون دائمًا أكبر بمرتين (قوى 2) - وهذا ضروري لتتمكن من فصل الأعلام الفردية التي تم تعيينها.
قم بدمج العلامات المطلوبة باستخدام الكلمة الأساسية Or:
Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly
يؤدي هذا إلى تعيين TitleBar وReadonly في التعداد
للتحقق مما تم ضبطه:
If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
Window.TitleBar = True
End If
نصائح أخرى
يمكنك استخدام FlagsAttribute لتزيين Enum مثل ذلك الذي سيتيح لك دمج Enum:
<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4
ثم اتصل بهم هكذا (فئة UserPriviltes):
Public Sub New ( _
options As SecurityRights _
)
New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)
يتم دمجها بشكل فعال (رياضيات البت) بحيث يكون لدى المستخدم أعلاه كلاً من القراءة والتنفيذ في متغير SecurityRights واحد رائع.
للتحقق لمعرفة ما إذا كان المستخدم لديه امتياز تستخدمه AND (حسابات أكثر دقة للبت) للتحقق من قيمة تعداد المستخدمين باستخدام قيمة التعداد التي تتحقق منها:
//Check to see if user has Write rights
If (user.Privileges And SecurityRights.Write = SecurityRigths.Write) Then
//Do something clever...
Else
//Tell user he can't write.
End If
HTH ، تايلر
إذا فهمت سؤالك بشكل صحيح فأنت تريد الجمع بين أنواع التعداد المختلفة.إذن يمكن لمتغير واحد تخزين قيمة من أحد التعدادين المختلفين، أليس كذلك؟إذا كنت تسأل عن تخزين الجمع بين قيمتين مختلفتين من نوع تعداد واحد، يمكنك الاطلاع على شرح Dave Arkell
التعدادات هي مجرد أعداد صحيحة مع بعض السكر النحوي.لذا، إذا تأكدت من عدم وجود تداخل، يمكنك دمجهما عن طريق الإرسال إلى int.
لن يؤدي ذلك إلى إنشاء رمز جميل بالرغم من ذلك.أحاول تجنب استخدام التعدادات في معظم الأوقات.عادةً، إذا سمحت للتعدادات بالتكاثر في شفرتك، فستكون المسألة مجرد مسألة وقت قبل أن تلد بيانات الحالة المتكررة وغيرها من الأنماط المضادة الفوضوية.
مفتاح الجمع Enum
الهدف من الأمر s هو التأكد من أن القيمة هي قوة اثنين (1، 2، 4، 8، إلخ.) بحيث يمكنك إجراء عمليات البت عليها (|=
&=
).أولئك Enum
يمكن وضع علامة على s بـ a Flags
يصف.ال Anchor
تعد الخاصية الموجودة في عناصر تحكم Windows Forms مثالاً على عنصر التحكم هذا.إذا تم وضع علامة عليها كعلامة، فسيسمح لك Visual Studio بالتحقق من القيم بدلاً من تحديد واحدة في القائمة المنسدلة في مصمم الخصائص.
إذا كنت تتناول استخدام علامات التعداد () فهناك مقالة جيدة هنا.